显式调用~boost :: lock_guard<>导致互斥锁死锁

时间:2012-09-07 15:00:42

标签: boost mutex

如果这是一个错误,我没有问题,只是不这样做,但如果这是一个预期的行为,我想知道原因。

我这样做:

{
   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
}

1 个答案:

答案 0 :(得分:2)

一旦lg的构造完成,C ++就会保证在析构函数exit 上调用它的析构函数,而不管你是否也在进行显式的析构函数调用

通过两次销毁lg,您正在调用未定义的行为,在这种情况下,该错误表现为死锁。