Mah*_*ell 2 c++ multithreading c++11
我正在寻找某种适用于原子双精度的加法操作。可悲的是:
myatomdouble += toadddouble;
Run Code Online (Sandbox Code Playgroud)
没有定义,
myatomdouble = myatomdouble + toadddouble;
Run Code Online (Sandbox Code Playgroud)
被多线程搞砸了,并且 fetch_add 仅适用于整型,但不适用于双精度型。但像 fetch_add 这样的东西正是我所需要的。:(
每次尝试修改变量时都进行互斥会使程序变得超慢,代码不可读,并且破坏了原子的思想。
那么这个问题有没有办法解决呢?
您可以按照对通用对象实现任何原子修改的方式来实现这一点。
template<typename T>
T atomic_fetch_add(std::atomic<T> *obj, T arg) {
T expected = obj->load();
while(!atomic_compare_exchange_weak(obj, &expected, expected + arg))
;
return expected;
}
Run Code Online (Sandbox Code Playgroud)
尽管不能保证atomic<double>不使用互斥体,所以您必须检查您的实现。
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |