gpt4 book ai didi

c++ - 无损原子添加?

转载 作者:行者123 更新时间:2023-11-30 01:50:42 28 4
gpt4 key购买 nike

如果我有这样一个原子变量:

#include <atomic>

std::atomic<int> a = 5;

我想自动检查 (a + 4) 是否小于另一个变量,而不覆盖 a 的原始值:

if(a.something(4) < another_variable){
//Do not want a to be incremented by 4 at this point
}

我对原子 fetch_and_add()++ 进行了快速测试,之后它们似乎都增加了变量 a 的值。有没有一种方法可以自动递增以进行测试,而结果不会是永久性的?

最佳答案

if(a + 4 < another_variable) // ...

这是您可以使用单个原子获得的最好结果。您没有数据争用,因为原子的读取对于并发写入是安全的,并且所有后续操作都发生在原始原子值的拷贝上。一个更冗长但功能等效的版本是:

int const copy_of_a = a.load();
if(copy_of_a + 4 < another_variable) // ...

这也是您在同步方面可以获得的最佳效果。您可能担心 a 可能会在另一个线程上更改为将更改 if 的结果的值。

假设有一个函数以原子方式完成整个操作:

 if(a.plus4IsLessThan(another_variable) // ...

然后 a 的并发更改是否及时到达以更改测试结果仍然是未知的。您在同步方面没有获得任何额外保证。

如果这是您的程序的问题,则表明您需要更强大的同步机制。 std::mutex 可能是一个好的开始。

关于c++ - 无损原子添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com