我正在尝试使用C 11 std :: condition_variable,但是当我尝试从第二个线程锁定与之关联的unique_lock时,我得到一个异常“资源死锁避免”.创建它的线程可以锁定和解锁它,但不能锁定和解锁它,即使我非常确定在第二个线程试图锁定它时不应该锁定unique_lock.
FWIW我在Linux中使用gcc 4.8.1 -std = gnu 11.
我已经在condition_variable,unique_lock和mutex周围写了一个包装类,所以我的代码中没有其他东西可以直接访问它们.注意使用std :: defer_lock,我已经陷入了陷阱:-).
class Cond {
private:
std::condition_variable cCond;
std::mutex cMutex;
std::unique_lock<:mutex> cULock;
public:
Cond() : cULock(cMutex,std::defer_lock)
{}
void wait()
{
std::ostringstream id;
id << std::this_thread::get_id();
H_LOG_D("Cond %p waiting in thread %s",this,id.str().c_str());
cCond.wait(cULock);
H_LOG_D("Cond %p woke up in thread %s",id.str().c_str());
}
// Returns false on timeout
bool waitTimeout(unsigned int ms)
{<