我正在設計一個異步記錄器類如下。但是,不知道我是否正確使用boost條件變量。任何人都可以評論這個嗎?這裏processLogEntry方法是一個線程函數,我在這裏使用boost。使用升壓條件變量
void LogWriter::stopThread()
{
mStop = true;
mCond.notify_one();
mThread->join();
}
void LogWriter::processLogEntry()
{
while(!mStop)
{
boost::mutex::scoped_lock lock(mMutex);
mCond.wait(lock);
while(!q.empty())
{
// process begins
}
}
}
void LogWriter::addLogEntry()
{
boost::mutex::scoped_lock lock(mMutex);
// add it in the queue
mCond.notify_one();
}
您的代碼中的一個明顯問題是'mStop'遭受競爭條件,可以通過使用'atomic <>'變量修改它。另外請同時更新你的代碼,將日誌推送到隊列中(我猜?)'q',讓我們更好地理解你的問題。 – user2k5
我正在爲mStop使用volatile bool。即使這樣會有問題? – user243655
mStop不會遇到競爭條件,因爲它僅由stopThread修改,並且stopThread在返回之前等待線程完成。 –