Noo*_*zen 10 c++ multithreading stdatomic
确切地说,我只需要将双倍增加一倍,并希望它是线程安全的.我不想使用互斥锁,因为执行速度会急剧下降.
Cas*_*sey 17
通常,C++标准库试图仅提供可以高效实现的操作.因为std::atomic
,这意味着可以在"通用"架构上的指令或两个指令中无锁地执行的操作."通用"体系结构具有整数的原子提取和添加指令,但不适用于浮点类型.
如果你想为原子浮点类型实现数学运算,你必须自己使用CAS(比较和交换)循环(Live at Coliru):
std::atomic<double> foo{0};
void add_to_foo(double bar) {
auto current = foo.load();
while (!foo.compare_exchange_weak(current, current + bar))
;
}
Run Code Online (Sandbox Code Playgroud)