【发布时间】:2018-03-31 01:15:03
【问题描述】:
我有一些这样的代码:
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<std::unique_ptr<myData>>? Rawnew/delete是 c++ 世界中最可怕的事情之一。
标签: c++ multithreading c++11