私は私が従っている特定のロック順序を持っています。現在順次実行されているいくつかのタスクを実行するためのスレッドプールを作成しています。
ロックの順序は、プール->キュー->ジョブです。
ただし、ジョブの状態を確認するためにジョブをロックしてから、キューをロックしてジョブをあるキューから別のキューに移動する必要がある場合があります。したがって、ロックの順序に従うために、私はこれを取得します:
lock job
if (job->state == CANCELED) {
unlock job
lock queue
lock job
// check that it is still canceled and do work
}
私の質問は、ロック解除/ロックの仕事がないこれを行う別の方法はありますか?ロックの順序を保持する必要があり、「より高い」ロックが必要な場合、これはどのように処理されますか?