我有一个线程安全计数器对象(它是一个使用std :: atomic load()和store()的类) 作为班级成员之一。线程1递增计数器,线程2读取计数器。
通常,由不同线程共享的原始类型(int等)被声明为volatile以防止任何编译器优化。我是否必须声明这个由2个不同线程共享的线程安全计数器对象作为volatile?
有人可以提供更深入的了解吗?
答案 0 :(得分:0)
看看:volatile (C++) msdn article
你不必因为
答案 1 :(得分:0)
没有。没有必要将对象声明为原子。
C或C ++编译器可能不会重新排序对易失性存储器位置的读取和写入,也不会省略对易失性存储器位置的读取或写入。
使用atomic
,它已经达到了volatile
要执行的操作,因此无需声明volatile
。