pthreads を使用する C アプリケーションがあります。
2 つのスレッド (A と B など) の間でロック競合が発生し、B がロックを待機している間に A が最初にロックを取得します。A が完了してロックを解放すると、B はまだ取得せず、しばらくすると A が取得します再びロックします (A はループで取得および解放します)。
プロセスを gdb にアタッチし、スレッド A がロックを放棄した後にスレッド A を一時停止し、手動でスレッド B を続行すると、それを取得して必要な処理を実行します。
これは私にはデッドロックのようには見えません。スレッド B がロックを取得するのを妨げているのは何ですか? どんな助けでも大歓迎です。
サンプルコード:
スレッド A:
while (true)
{
lock.acquire(lock)
// Do stuff
lock.release(lock)
// Do more stuff
}
スレッド B:
lock.acquire(lock)
// Do some stuff
lock.release(lock)