1
請考慮比較並交換了下面的一段代碼,讓我知道爲什麼這個原子指令是比原子檢查並設置更強大,作爲一個互斥原始?爲什麼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我們對鎖(標誌值)的更新少了些?如果我錯了,請糾正我的錯誤!那麼我們在更少的更新方面談論強大? –
有一個在他們如何work.In比較並交換有一個比較和更新在得到類似的價值發生根本的區別,在檢查並設置寫入新的值後,返回舊的值,檢查並設置將不會有最新的信息,因此每次都會覆蓋,而CompareAndSwap將會因此只會在值相同時寫入。 – Sadique