Microsoft에서 InterlockedExchange에 메모리 정렬이 필요하다고 혼란 스럽지만 Intel 설명서에 LOCK에 메모리 정렬이 필요 없다고 나와 있습니다. 나는 무엇인가 놓치고 있나? 감사InterlockedExchange 및 메모리 정렬
마이크로 소프트 MSDN 라이브러리플랫폼 SDK에서
: DLL을 프로세스 및 스레드 InterlockedExchange는
변수는 32 비트 경계에 정렬해야하는 대상 매개 변수가 가리키는 ; 그렇지 않은 경우이 함수는 다중 프로세서 x86 시스템 및 비 x86 시스템에서 예기치 않게 작동합니다 ().
인텔 소프트웨어 개발자 가이드;
LOCK 명령어는 프로세서의 LOCK # 신호가 첨부 된 명령의 실행 중에 발생 실리는 (원자 명령으로 지시 변). 다중 프로세서 환경에서 LOCK # 신호는 프로세서가을 사용하는 동안 신호가 어 써트되는 동안 만 사용한다는 것을 보장합니다.
LOCK 접두사의 무결성은 메모리 필드의 정렬에 영향을받지 않습니다. 임의로 정렬되지 않은 필드에 대해 메모리 잠금이 관찰됩니다. P6에서
메모리 주문 및 최근의 프로세서 제품군
잠금 지침은 전체 순서가 있습니다.
버스 잠금 장치의 무결성을 잠금
소프트웨어 제어 버스는 메모리 필드의 정렬에 영향을받지 않습니다. 전체 피연산자를 갱신하는 데 필요한만큼의 버스 사이클만큼 에 대해 LOCK 의미를 따른다. 그러나 더 나은 시스템 성능을 위해 잠긴 액세스를 본래의 경계에 맞추는 것이 좋습니다. • 8 비트 액세스의 모든 경계 (잠김 또는 기타). • 잠긴 단어 액세스의 경우 16 비트 경계입니다. • 잠긴 더블 워드 액세스의 경우 32 비트 경계. • 잠긴 쿼드 워드 액세스의 경우 64 비트 경계.
그럴까요? : "cmpxchg operation ...
이 없습니다* 않습니다 * 맞춤 *"필요합니다 " –