問題タブ [qreadwritelock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1787 参照

c++ - Qt では、QMutex または QReadWriteLock の状態を照会するにはどうすればよいですか?

リソース オブジェクトへのアクセスを保護するために、アプリケーションでQReadWriteLockを使用しています。

可能な場合は QReadLocks と QWriteLocks を使用していますが、関数の境界を越える「長寿命」のロックが必要になる場合があります。したがって、すでにロックが解除されているミューテックスのロックを解除するのは非常に悪いため、QReadWriteLock (または QMutex、この状況では同じこと) の状態を照会できる必要がある場合があります。

QMutex の場合:

ロックされていないミューテックスをロック解除すると、未定義の動作が発生します。

QReadWriteLock の場合:

ロックされていないロックを解除しようとするとエラーになり、プログラムが終了します。

ミューテックスの状態を照会できることは、何らかの操作を開始する前にデバッグ アサーションでテストする場合にも非常に便利です。実際に「長寿命」のロックがあるかどうかを確認します。

しかし、私が本当に望んでいるのは、ロックを持っている場合はミューテックスのロックを解除でき、持っていない場合はロックを解除できないことだけです。それは私の一日になります。IMOunlock()関数はすでにこれを行う必要がありますが、そうではありません。

これを回避する方法はありますか?

(いいえ、Recursiveモードを使用してもこの状況では役に立ちません)

0 投票する
2 に答える
648 参照

c++ - QReadWriteLock 再帰モードが機能しない

gcc 4.4.3 を使用する Linux qt 4.7.4 では、次のコードは正常にコンパイルされ、実行時エラーは発生しません。

ロックは同じスレッドによって数回ロックされ、何も起こりません。マニュアルによるとhttp://doc.qt.io/archives/qt-4.7/qreadwritelock.html

ロックは、同じスレッドによって一度だけロック可能であるべきです。これは重大なバグですか、それともマニュアルを誤解していますか?

Chris への返信: ロックは NonRecursive でも数回ロック解除する必要があります。1 つのロック解除がコメント アウトされている場合、次のコードは "Writing" を出力しません。