私たちのデータベースプログラムで何かすると、私は奇妙なデッドロックに直面しています。重要な点は、スレッドがロックしようとするときです。QMutex
:QMutexをロックしているスレッドを確認してください
QMutexLocker locker(&tableMutex_);
これでプログラムが停止します。
他のスレッド(AFAIK)がこのミューテックスにアクセスできないため、私は困惑しています。私が今したいのは、どのスレッドがそれをロックしているかを知ることです。どうすればいい?
私たちのデータベースプログラムで何かすると、私は奇妙なデッドロックに直面しています。重要な点は、スレッドがロックしようとするときです。QMutex
:QMutexをロックしているスレッドを確認してください
QMutexLocker locker(&tableMutex_);
これでプログラムが停止します。
他のスレッド(AFAIK)がこのミューテックスにアクセスできないため、私は困惑しています。私が今したいのは、どのスレッドがそれをロックしているかを知ることです。どうすればいい?
デバッガでハンギングプログラムを中断し、すべてのスレッドのスタックトレースを調べます。
私はそれを行いました。しかし、数千行のコードのどこにでもロックされている可能性があります。 –
@TomášZato:あなたのmutexを 'QMutexLocker'や同様のRAIIメカニズムでロックしているのであれば、他のスレッドがQMutexLockerが存在するスコープ内にあるかどうかチェックするのは難しいことではありません。 –
同じスレッドがミューテックスを2回ロックした可能性があります。再帰バージョンのQMutexを使用してみてください(QMutexコンストラクタに 'QMutex :: Recursive'を渡してください)。 – ramzes2