gpt4 book ai didi

c++ - 是否有检查前提条件的原子增量,即原子值小于指定值?

转载 作者:太空狗 更新时间:2023-10-29 23:20:43 26 4
gpt4 key购买 nike

在新的标准 C++ 原子增量操作中,在增量值之前是否具有检查前提条件,即原子值小于指定值?

我能比下面的代码更容易、更快吗?

int atomic_inc(std::atomic_int& val, int less_than) {
int new_val;
int old_val = val.load();
do
{
if (old_val > less_than) return old_val;
new_val = old_val + 1;
} while (!val.compare_exchange_weak(old_val, new_val));

return new_val;
}

如果有人不知道 compare_exchange_weak 是如何工作的:compare_exchange_weak 读取 val,与 old_val 比较,如果不相等则将 val 保存到 old_val。如果相等则将 new_val 保存到 val。

最佳答案

我过去做过的一些事情,可能对你有用,这取决于你使用它的目的。

如果您可以假设 val 不会经常裁剪——因此不执行 CAS 的可能优化不会为您节省很多——您可以盲目地递增阅读后调整该值:

int atomic_inc(std::atomic_int& val, int less_than) {
return std::min(++val, less_than);
}

然后如果需要,偶尔将 val 回落到 less_than,通常足以让您不必担心 int 溢出, 你是金色的。

关于c++ - 是否有检查前提条件的原子增量,即原子值小于指定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778110/

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