使用原子操作可以避免互斥。当一个线程调用原子操作时,其他线程会视之为瞬间发生的。
优点:相对于Lock速度快,且不会有死锁和convoying。
缺点:原子操作只限于有限的几种操作。
tbb中基本的原子操作如下表
所谓的compare_and_swap操作如下代码所示:
atomic<int> globalx;
int UpdatedX() { // Update x and return old value of x.
do {
// Read globalX
oldx = globalx;
newx = ...expression involving oldx....
// Store new value if another thread has not changed globalX.
}while (globalx.compare_and_swap(newx, oldx)!=oldx);
return oldx;
}
1. A线程从globalx中读取了value A
2. 其他的线程将globalx的值修改从A到B再到A
3.步骤1