1
我有一個類,其中一個布爾同時訪問。但是在我的情況下,它只在構造函數中初始化爲false,然後設置爲false。我是否正確地相信即使可能發生競爭,結果將是有效的和定義的?由於整個布爾沒有必要寫入「!isStopping_」以評估爲true。將布爾值設置爲true時需要原子CAS
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_;
};
只要緩存不阻止未讀新值,那麼它應該是罰款。只需要設置一個位(即使寫入本身並非在所有單詞中都是原子的) - 並且它只能在「共享」狀態下設置爲一種方式。 **更好地將其標記爲volatile(用於緩存/訪問問題)。** – 2010-08-06 17:56:07
是的,關於volatile與MT的問題幾乎每天都會在這裏問到。最近一個:http://stackoverflow.com/questions/3372703/volatile-and-multithreading – Dummy00001 2010-08-06 23:31:34