web-dev-qa-db-ja.com

ロックがプロセスAからプロセスBに移動することを確認する

プロセスAがいくつかの共有リソースに排他的ロックを持っているとしましょう。実行が完了した後、プロセスBが確実にロックを取得するようにする方法はありますか(たとえば、プロセスCがロックを取得できるのと比較して)?

私は比較的あまり使用されていない言語でコーディングしていますが、質問を言語固有のタグに限定したくありませんでした(上記を保証する言語に依存しない方法がある場合)。

1
rahs

単一のミューテックスでこれを行うことはできませんが、ミューテックスに加えて(またはミューテックスの代わりに)いくつかのセマフォを使用することはできます。基本的に、Aが終了すると、B'sセマフォを通知します。 BまたはCが終了すると、「他のすべての人」のセマフォを通知します。 AおよびCは、共有リソースを使用する前に、「他のすべての」セマフォを待機します。

1
Karl Bielefeldt

いいえ。あなたの言語またはライブラリがそのような保証をしない限り、あなたは別のプロセスがロックを取得すると想定してはなりません。他のプロセスがロックを取得する可能性のあるギャンブルをするべきではありません。

Starvationは、たとえば、プロセスAが速すぎて、プロセスBがまだ待機している間にロックを再取得できない場合に、発生する可能性があります。または、プロセススケジューラが適切に設計されていない場合、Bがロックを取得する機会を得ることができない可能性があります。

注:Aは処理を終了できる(したがって、別のロックを待ってスタックしない)と言ったので、デッドロックは発生しないと想定しました

0
Christophe