我正在做这样的事情:
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
回调,我也看不到它。我是否需要任何其他同步?回调仅读取,但不写入该字符串。 最佳答案
在一个线程中写入值并在另一个线程中访问值时,您需要进行适当的同步。如果两个线程之间没有正确同步,则将导致数据争用。任何数据争用都会导致您的程序具有未定义的行为。