在新标准 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
满溢,而你是金色的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)