Требуется ли атомарный CAS при установке логического значения в true - PullRequest
1 голос
/ 06 августа 2010

У меня есть класс, где bool - это доступ одновременно. Однако в моем случае он только один раз инициализируется как false в конструкторе, и после этого он устанавливается в false. Правильно ли я полагать, что, хотя гонка может произойти, результат будет действительным и определенным? Так как весь bool не должен быть записан в inorder для "! IsStopping_", чтобы получить значение true.

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 Ответ

3 голосов
/ 06 августа 2010

Я не совсем уверен в этом вопросе, но вам, вероятно, стоит заглянуть в ключевое слово "volatile".IIRC гарантирует, что значение обновляется при каждом обращении.

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

HTH

...