2013-10-28 2 views
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; 
} 
+0

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf 12. –

+0

@Acme 따라서 우리는 http://stackoverflow.com/questions에 따라 말할 수 있습니다./3659336/compare-and-swap-vs-test-and-set 우리는 잠금 (플래그 값)에 대한 업데이트가 적습니까? 내가 틀렸다면 나를 바로 잡아주세요! 적은 업데이트로 강력 함을 이야기하고 있습니까? –

+1

작동 방식에는 근본적인 차이가 있습니다. CompareAndSwap에는 유사한 값을 가져올 때 비교 및 ​​업데이트가 발생하며 테스트 및 설정에서 이전 값은 새 값을 쓰고 반환되며 테스트 및 설정에는 적용되지 않습니다. upto 정보가 없으므로 CompareAndSwap은 값이 같을 때만 쓸 것이므로 쓰기 할 때마다 매번 덮어 씁니다. – Sadique

답변

0

테스트 및 설정은 메모리 위치의 내용을 수정하고 이전 값을 단일 단위 작업으로 반환합니다.

compare-and-swap은 메모리 위치의 내용을 주어진 값과 원자 ​​적으로 비교하고, 동일한 경우에만 해당 메모리 위치의 내용을 지정된 새 값으로 수정합니다.

관련 문제