1
CompareAndSwap에 대한 다음 코드 조각을 고려해 보시고이 원자 명령어가 상호 배타 프리미티브가되는 원자 TestAndSet보다 더 강력한 이유를 알려주십시오.왜 CompareAndSwap은 TestAndSet보다 강력한 명령어입니까?
char CompareAndSwap(int *ptr, int old, int new) {
unsigned char ret;
// Note that sete sets a ’byte’ not the word
__asm__ __volatile__ (
" lock\n"
" cmpxchgl %2,%1\n"
" sete %0\n"
: "=q" (ret), "=m" (*ptr)
: "r" (new), "m" (*ptr), "a" (old)
: "memory");
return ret;
}
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf 12. –
@Acme 따라서 우리는 http://stackoverflow.com/questions에 따라 말할 수 있습니다./3659336/compare-and-swap-vs-test-and-set 우리는 잠금 (플래그 값)에 대한 업데이트가 적습니까? 내가 틀렸다면 나를 바로 잡아주세요! 적은 업데이트로 강력 함을 이야기하고 있습니까? –
작동 방식에는 근본적인 차이가 있습니다. CompareAndSwap에는 유사한 값을 가져올 때 비교 및 업데이트가 발생하며 테스트 및 설정에서 이전 값은 새 값을 쓰고 반환되며 테스트 및 설정에는 적용되지 않습니다. upto 정보가 없으므로 CompareAndSwap은 값이 같을 때만 쓸 것이므로 쓰기 할 때마다 매번 덮어 씁니다. – Sadique