是否交换或compare_and_exchange读取修改顺序最后的价值?(Does exchang

2019-07-19 16:55发布

我读的C ++并发在行动由安东尼·威廉斯。 在部分“理解松散排序”它具有:

有一些额外的东西,你可以告诉机柜内的人,如“记下这个号码,告诉我什么是在列表的底部 ”(交换)和“记下这个号码,如果底部的名单是; 否则告诉我,我应该已经猜到”(compare_exchange_strong),但这并不影响其基本原则。

这是否意味着这样的操作总是读取修改为了最后的值(如果有约束之前没有额外的线程间发生的)? 即是否有一些缓存更新的/ etc(甚至在松散排序)?

Answer 1:

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

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

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



文章来源: Does exchange or compare_and_exchange reads last value in modification order?