2017-01-18 39 views
0

私たちのデータベースプログラムで何かすると、私は奇妙なデッドロックに直面しています。重要な点は、スレッドがロックしようとするときです。QMutexQMutexをロックしているスレッドを確認してください

QMutexLocker locker(&tableMutex_); 

これでプログラムが停止します。

他のスレッド(AFAIK)がこのミューテックスにアクセスできないため、私は困惑しています。私が今したいのは、どのスレッドがそれをロックしているかを知ることです。どうすればいい?

+0

同じスレッドがミューテックスを2回ロックした可能性があります。再帰バージョンのQMutexを使用してみてください(QMutexコンストラクタに 'QMutex :: Recursive'を渡してください)。 – ramzes2

答えて

-1

デバッガでハンギングプログラムを中断し、すべてのスレッドのスタックトレースを調べます。

+0

私はそれを行いました。しかし、数千行のコードのどこにでもロックされている可能性があります。 –

+0

@TomášZato:あなたのmutexを 'QMutexLocker'や同様のRAIIメカニズムでロックしているのであれば、他のスレッドがQMutexLockerが存在するスコープ内にあるかどうかチェックするのは難しいことではありません。 –

関連する問題