为什么CompareAndSwap比TestAndSet更强大?

时间:2013-10-28 05:57:25

标签: c locking mutual-exclusion compare-and-swap test-and-set

请考虑以下的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;
}

1 个答案:

答案 0 :(得分:1)

test-and-set修改内存位置的内容,并将其旧值作为单个原子操作返回。

compare-and-swap原子地将内存位置的内容与给定值进行比较,并且只有它们相同时,才将该内存位置的内容修改为给定的新值。

相关问题