什么是原子寄存器的返回读取结果

时间:2014-12-25 22:17:51

标签: concurrency language-agnostic terminology atomic

我有这2个帖子。

Thread 1:  wwwww
Thread 2:   rrrrr

第一次写入来自线程1,并与来自线程2的第一次读取重叠。

两个线程都有一个值为33的原子寄存器。 Thread1向原子寄存器写入值68,而thread2读取值。

thread2的返回结果是什么? 33或68?

1 个答案:

答案 0 :(得分:0)

简单的答案:" atomic"的全部意义。读/写是它强制序列化。所以结果将取决于哪个线程"首先"。如果先写入,则read将返回新值,否则返回旧值。

如果你有一个CPU,就不会有#34;重叠",因为一次只运行一个线程。

如果你有多个CPU,它会强行停止一个CPU,同时它会弹回两个CPU之间的缓存。只有"所有者"高速缓存行可以写入,并且其他所有人都必须转储您写入的高速缓存的(只读)副本。

对于复杂的答案,你应该阅读Ulrich Dreppers'引人入胜的文章What every programmer should know about memory。具体来说,在第2部分的3.3.4节中,它描述了CPU反弹缓存的协议。如果你正在处理原子内存访问,你可能需要良好的内存心智模型。而记忆远比你想象的要复杂得多。