2014-03-29 4 views

답변

0

compare-and-setcompare-and-swap의 변종이며, 여기서 메모리 위치의 데이터가 주어진 값과 일치하는지 여부와 따라서 메모리 위치가 업데이트되었는지 여부에 대한 참/거짓 표시를 얻습니다. compare-and-swap 대안은 메모리에서 읽은 내용을 다시 얻는 것이며 주어진 값과 직접 비교할 수 있습니다.

http://en.wikipedia.org/wiki/Compare-and-swap

CMPXCHG 명령 사실에 compare-and-set 명령이다. 제로 플래그 (EFLAGS.ZF)는 메모리의 값이 EAX (묵시적 레지스터)에 주어진 값과 일치 할 경우 설정됩니다.이 경우 소스 피연산자의 값 (명시 적 레지스터)이 메모리에 저장됩니다. compare-and-swap 명령은 명령 메모리에서, 는, EAX와 대상 메모리에 쓰기 소스 레지스터에 쓰기 비교 읽을 것을 요구하기 위해, 그 CISC파 인 심지어 X86에 대한 자연스러운 것 우수성.

CMPXCHG가 원자 적으로 실행되도록하려면 접두어 LOCK을 사용해야합니다. 즉, CMPXCHG를 실행하는 스레드가 다른 스레드가 액세스하기 전에 메모리 위치를 읽은 다음 쓸 수 있습니다.

메모리 위치를 0으로 설정 한 다음 0을 소스 레지스터에서 원하는 값으로 설정했다면 resetting the memory if the compare succeeded이라고 말하십시오. compare-and-swap을하는 방법을 휴대

this SO question

CMPXCHG 명령 대상 피연산자 레지스터 수 있도록 주뿐만 아니라 메모리 위치에 리소스를 참조. 8 바이트를 테스트 할 때 CMPXCHG8B 명령어를 사용합니다. CMPXCHG8B 명령어에 LOCK 접두사를 지정하고 대상으로 레지스터를 지정하면 펜티엄 프로세서에 버그가 있습니다. 자세한 내용은 here

관련 문제