0

std::unique_lockwhen wait aの必要性にかなり混乱していstd::conditional_variableます。そのため、VS 2013 のライブラリ コードを調べると、さらに混乱します。std::conditional_variable::wait()実装方法は次のとおりです。

void wait(unique_lock<mutex>& _Lck)
    {   // wait for signal
    _Cnd_waitX(&_Cnd, &_Lck.mutex()->_Mtx);
    }

これは何かの冗談ですか?ミューテックスを unique_lock でラップし、後で元に戻すだけですか? パラメータリストでミューテックスを使用しないのはなぜですか?

4

2 に答える 2

0

問題は、シグナルを受け取った後にウェイクアップするときに、ミューテックスを既にロックしておく必要があることです。シグナルでウェイクアップした後にミューテックスをロックしようとすると、競合状態になります。別の側面では、条件変数の待機は、ロックを適切に返すことができないため、そのミューテックスを単独でロックすることはできません。通常、とにかく待機する前にミューテックスをロックする必要があります。

于 2013-10-24T15:50:50.683 に答える