繁体   English   中英

为什么std :: atomic_compare_exchange更新期望值?

[英]Why does std::atomic_compare_exchange update the expected value?

为什么std::atomic_compare_exchange及其所有兄弟姐妹都会更新传递的期望值?

我想知道,除了循环中给定的简单性之外,是否还有其他原因,例如:是否有一个内在函数可以在一个操作中做到这一点以提高性能?

处理器必须加载当前值,以便执行操作的“比较”部分。 当比较失败时,调用方需要知道新值,然后重试比较交换(您几乎总是在循环中使用它),因此如果未返回(例如,通过修改引用传递的期望值)那么调用者将需要做另一个原子加载来获取新值。 这很浪费,因为处理器已经加载了该值。 只有在极端性能是唯一选择的情况下,才应该对低级原子操作感到迷惑,因此在那种情况下,您不想执行两项操作。

是否有一个内在函数可以在一个操作中做到这一点以提高性能

那能做什么,特别是? 该指令必须加载当前值以进行比较,因此在不匹配的情况下产生当前值不会花费任何成本,并且几乎可以保证是有用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM