2

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

我做这样的事情:

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

1 回答 1

2

一旦构建lg完成,C++ 保证它的析构函数将在范围退出时被调用,而不管您是否也在进行显式的析构函数调用

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

于 2012-09-07T15:04:05.357 回答