我有一些像這樣的代碼:std :: condition_variable是線程安全的嗎?
std::queue<myData*> _qDatas;
std::mutex _qDatasMtx;
發生器功能
void generator_thread()
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
{
std::lock_guard<std::mutex> lck(_qDatasMtx);
_qData.push(new myData);
}
//std::lock_guard<std::mutex> lck(cvMtx); //need lock here?
cv.notify_one();
}
消費功能
void consumer_thread()
{
for(;;)
{
std::unique_lock lck(_qDatasMtx);
if(_qDatas.size() > 0)
{
delete _qDatas.front();
_qDatas.pop();
}
else
cv.wait(lck);
}
}
所以,如果我有幾十個發電機線程和一個消費者線程的,我需要在每個線程中調用cv.notify_one()時是否存在互斥鎖?
而且是std :: condition_variable線程安全的?
爲什麼不'std :: queue>'? raw'new' /'delete'是C++世界中最可怕的事情之一。 –
ikh