我读的C ++并发在行动由安东尼·威廉斯。 在部分“理解松散排序”它具有:
有一些额外的东西,你可以告诉机柜内的人,如“记下这个号码,告诉我什么是在列表的底部 ”(交换)和“记下这个号码,如果底部的数名单是; 否则告诉我,我应该已经猜到”(compare_exchange_strong),但这并不影响其基本原则。
这是否意味着这样的操作总是读取修改为了最后的值(如果有约束之前没有额外的线程间发生的)? 即是否有一些缓存更新的/ etc(甚至在松散排序)?
我读的C ++并发在行动由安东尼·威廉斯。 在部分“理解松散排序”它具有:
有一些额外的东西,你可以告诉机柜内的人,如“记下这个号码,告诉我什么是在列表的底部 ”(交换)和“记下这个号码,如果底部的数名单是; 否则告诉我,我应该已经猜到”(compare_exchange_strong),但这并不影响其基本原则。
这是否意味着这样的操作总是读取修改为了最后的值(如果有约束之前没有额外的线程间发生的)? 即是否有一些缓存更新的/ etc(甚至在松散排序)?
是。 C ++标准说(29.3 / 10):
原子读 - 修改 - 写操作将始终读与读取 - 修改 - 写入操作相关联的写入之前写的最后一个值(在修改顺序)。
双方exchange
和成功compare_exchange_{weak,strong}
操作都是读-修改-写操作。