如果这是一个错误,我没有问题,只是不这样做,但如果这是一个预期的行为,我想知道原因。
我这样做:
{
boost::lock_guard<boost::mutex> lg(tagsToSocketsMtx);
// mutex protected work
lg.~lock_guard(); // this causes deadlocks later(combined with ...
//...other uses of the same mtx, ofc I use different lock guard in other functions)
// rest of the function
}
答案 0 :(得分:2)
一旦lg
的构造完成,C ++就会保证在析构函数exit 上调用它的析构函数,而不管你是否也在进行显式的析构函数调用。
通过两次销毁lg
,您正在调用未定义的行为,在这种情况下,该错误表现为死锁。