原子指令:当比较和交换指令正在进行时,其他线程如何更新该值?

时间:2015-04-27 01:29:24

标签: multithreading assembly thread-synchronization compare-and-swap atomic-swap

根据我的理解,任何原子指令(compare_and_swap,test_and_test,fetch_and_add)都作为单个指令执行。虽然它们涉及多个CPU周期/操作,但它对于线程/进程是不可见的。如果一个线程正在执行任何这样的原子指令,则不允许其他线程修改/访问这种原子指令中涉及的任何值(存储器位置/寄存器)。

如果是这种情况,为什么在维基百科http://en.wikipedia.org/wiki/Compare-and-swap中,声明 如果该值在此期间被另一个线程更新,则写入将失败。

当一个线程中的compare_and_swap指令正在进行时,其他线程如何更新该值?

1 个答案:

答案 0 :(得分:0)

这是一种令人困惑的措辞。这真的是写不会立即通过。通常,编写代码的方式意味着写入将被阻塞,直到另一个线程完成。说写会失败是不真实的。