例如:
#include <atomic>
std::atomic_bool atomicBool(false);
int sharedVariable = 0;
void work() {
if (atomicBool) {
sharedVariable++; //will this line protected by atomic variable?
}
}
语句sharedVariable++;
会被atomicBool
保护为线程安全吗?如果不是(我猜不是文件的一瞥),这是否意味着这种情况下我仍然需要使用互斥锁?
最佳答案
编号
原子变量不是互斥体。
除了对自己进行读写操作外,它们不保护任何其他内容。
即使他们做到了,使用这种语法,变量也无法“知道”其命名范围。
听起来sharedVariable
应该是原子的,尽管如果您还有更多要作为实际代码中的块保护的语句,那还是不够的。