3

我正在阅读Anthony Williams 的C++ Concurrency in Action。在“了解轻松排序”部分,它具有:

您还可以告诉隔间里的人一些额外的事情,例如“写下这个数字,并告诉我列表底部是什么”(交换)和“如果底部的数字,写下这个数字清单是这样的;否则告诉我我应该猜到什么”(compare_exchange_strong),但这并不影响一般原则。

这是否意味着此类操作总是按修改顺序读取最后一个值(如果在约束之前没有发生额外的线程间)?即是否有一些缓存更新/等(即使在宽松的排序中)?

4

1 回答 1

7

是的。C++ 标准说 (29.3/10):

原子读-修改-写操作应始终读取在与读-修改-写操作关联的写之前写入的最后一个值(按修改顺序)。

exchange成功的操作都是compare_exchange_{weak,strong}读-修改-写操作。

于 2013-02-10T17:27:41.243 回答