我有一些像这样的代码: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