私はこのコードを持っています:
std::unique_lock<std::mutex> lock(m_mutex);
for(;;)
{
// wait for input notification
m_event.wait(lock);
// if there is an input pin doesn't have any data, just wait
for(DataPinIn* ptr:m_in_ports)
if(ptr->m_data_dup==NULL)
continue;
// do work
Work(&m_in_ports,&m_out_ports);
// this might need a lock, we'll see
for(DataPinIn* ptr:m_in_ports)
{
// reduce the data refcnt before we lose it
ptr->FreeData();
ptr->m_data_dup=NULL;
std::cout<<"ptr:"<<ptr<<"set to 0\n";
}
}
m_eventはcondition_variableです。別のスレッドからの通知を待ってから、いくつかの作業を行います。しかし、これは初めて成功するだけであり、m_event.notify_one()が何度呼び出されても、m_event.wait(lock)で永久にブロックされることがわかりました。これをどのように解決すればよいですか?
前もって感謝します。