为什么std::atomic_compare_exchange
及其所有兄弟姐妹更新传递的期望值?
我想知道除了给定的循环简单性之外是否还有其他原因,例如:是否有一个内在函数可以在一个操作中做到这一点以提高性能?
为什么std::atomic_compare_exchange
及其所有兄弟姐妹更新传递的期望值?
我想知道除了给定的循环简单性之外是否还有其他原因,例如:是否有一个内在函数可以在一个操作中做到这一点以提高性能?
处理器必须加载当前值,以便执行“比较”操作部分。当比较失败时,调用者需要知道新值,重试比较交换(你几乎总是在循环中使用它),所以如果它没有被返回(例如,通过修改通过引用传递的预期值)那么调用者将需要执行另一个原子加载来获取新值。这很浪费,因为处理器已经加载了该值。当极限性能是唯一的选择时,你应该只搞乱低级原子操作,所以在这种情况下,你不想在一个可以执行的情况下执行两个操作。
是否有一种内在功能可以在一次操作中做到这一点以提高性能
那可以做什么,具体是什么?该指令必须加载当前值来进行比较,因此产生当前值的不匹配不会产生任何成本,并且几乎可以保证是有用的。