将布尔值设置为true时是否需要原子CAS

时间:2010-08-06 17:49:03

标签: c++ thread-safety

我有一个同时访问bool的类。但是在我的情况下,它只在构造函数中初始化为false,然后设置为false。我是否正确地相信即使比赛可能会发生,结果也是有效和定义的?因为整个bool不必写入以便“!isStopping_”评估为真。

class MyClass
{
public:
   MyClass() : isStopping_(false), thread_([=]{Run();}) {}

   void Stop()
   {
      isStopping_ = true;
   }

private:

   void Run()
   {
       while(!isStopping_) // data race
       {
            // Work
       }
   } 

   bool isStopping_ ;
   boost::thread thread_;
};

1 个答案:

答案 0 :(得分:3)

我不太确定这个问题,但您应该查看“volatile”关键字。 IIRC,它确保在访问时更新价值。

http://en.wikipedia.org/wiki/Volatile_variable

HTH