それについてのQtドキュメントQMutex
では次のように述べられています:
(...)スレッドでlock()を呼び出すと、同じ場所でlock()を呼び出そうとする他のスレッドは、ロックを取得したスレッドがunlock()を呼び出すまでブロックします。lock()の非ブロッキング代替手段はtryLock()です。(...)
私はこのコードを何度も使用しています:
QMutex mutex;<br>
while( !mutex.tryLock() );
誰かが私にこのtryLock()
メソッドがどのように構築されているかを説明できますかwhile()
?ループはプログラム全体をハングさせませんか?
2つのスレッドが1つを共有QMutex
し、通信FIFOとして機能します。1つのスレッドがデータを送信し、別のデータが2番目のスレッドにスケジュールされている場合、そのスレッドは最初のスレッドが完了するのを待機しています。通信はModbus標準に準拠しています-send1-receive1、send2-receive2。
並列送受信はできません。したがって、常に1つのスレッドがアクティブで、残りは待機しています。
QMutex mutex;
thread1() {
while( !mutex.tryLock() )
;
doThread1Job();
}
thread2() {
while( !mutex.tryLock() )
;
doThread2Job();
}