リソース オブジェクトへのアクセスを保護するために、アプリケーションでQReadWriteLockを使用しています。
可能な場合は QReadLocks と QWriteLocks を使用していますが、関数の境界を越える「長寿命」のロックが必要になる場合があります。したがって、すでにロックが解除されているミューテックスのロックを解除するのは非常に悪いため、QReadWriteLock (または QMutex、この状況では同じこと) の状態を照会できる必要がある場合があります。
QMutex の場合:
ロックされていないミューテックスをロック解除すると、未定義の動作が発生します。
QReadWriteLock の場合:
ロックされていないロックを解除しようとするとエラーになり、プログラムが終了します。
ミューテックスの状態を照会できることは、何らかの操作を開始する前にデバッグ アサーションでテストする場合にも非常に便利です。実際に「長寿命」のロックがあるかどうかを確認します。
しかし、私が本当に望んでいるのは、ロックを持っている場合はミューテックスのロックを解除でき、持っていない場合はロックを解除できないことだけです。それは私の一日になります。IMOunlock()
関数はすでにこれを行う必要がありますが、そうではありません。
これを回避する方法はありますか?
(いいえ、Recursive
モードを使用してもこの状況では役に立ちません)