原子指令:当比较和交换指令正在进行时,其他线程如何更新值?
Posted
技术标签:
【中文标题】原子指令:当比较和交换指令正在进行时,其他线程如何更新值?【英文标题】:Atomic instruction : How can other thread update the value while Compare and Swap instruction is in progress? 【发布时间】:2015-04-27 01:29:23 【问题描述】:据我了解,任何原子指令(compare_and_swap、test_and_test、fetch_and_add)都作为一条指令执行。尽管它们涉及多个 CPU 周期/操作,但它对线程/进程是不可见的。如果一个线程正在执行任何此类原子指令,则不允许其他线程修改/访问该原子指令中涉及的任何值(内存位置/寄存器)。
如果是这样的话,为什么在***http://en.wikipedia.org/wiki/Compare-and-swap 中,声明如果同时该值已被另一个线程更新,则写入将失败。强>?
当一个线程中的 compare_and_swap 指令正在进行时,其他线程如何更新值?
【问题讨论】:
【参考方案1】:这是一种令人困惑的措辞。真的是写不下去了。通常,编写代码的方式意味着写入将被阻塞,直到另一个线程完成。说写会失败是不真实的。
【讨论】:
以上是关于原子指令:当比较和交换指令正在进行时,其他线程如何更新值?的主要内容,如果未能解决你的问题,请参考以下文章
多线程程序,当一条原子指令刚执行一半的时候,CPU时间片耗尽,此时是立刻切换线程吗?