在另一个线程visual studio 2012中看不到std :: string的变化

时间:2014-06-09 11:49:30

标签: c++ multithreading visual-studio-2012

我正在做这样的事情:

struct MyClass::Impl {
   std::string someString;

   //Invoked from thread "anotherThread"
   void callback() {
      std::cout << someString << std::endl;
   }
};


void MyClass::DoSomething() {
   //Connnect callback and fire operation in another thread
   anotherThread.Start(); 

   anotherThread.Op1();

   //Wait to finish without joining, Op1 invokes callback from another thread
   //...

   //string written in main thread
   impl->someString = someOtherString;

   anotherThread.Op2();
   //Wait to finish without joining, Op2 invokes callback from anotherThread
}

问题在于,即使已经写入,我也看不到回调中的impl->someString更改。我还需要其他同步吗?回调只读取,但从不写该字符串。

1 个答案:

答案 0 :(得分:3)

在一个线程中写入值并访问另一个线程中的值时,您需要进行适当的同步。如果没有在两个线程中进行适当的同步,那么您将进任何数据争用都会导致程序出现未定义的行为。