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

の構築が完了すると、C++は、明示的なデストラクタ呼び出しも行っているという事実に関係なく、lgスコープの終了時にそのデストラクタが呼び出されることを保証します。

2 回破棄するlgと、未定義の動作が呼び出されます。この場合、バグはデッドロックとして現れます。

于 2012-09-07T15:04:05.357 に答える