0

次の使用法を検討してください。

Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);

このコードは飢餓の自由を満たしていますか(つまり、プロセスがCS内に入るのを待つ場合、最終的には成功します)?

4

1 に答える 1

1

これは、複数のスレッドがで待機しているときにスレッドを選択する際に使用されるポリシーに実際に依存しdown(lock)ます。

例えば

  1. このポリシーがキューに基づいている場合は、飢餓がないことが保証されます。
  2. 複数の待機中のスレッドの1つが任意に選択された場合、まったくの不運によって飢餓状態になる可能性があります。
  3. 優先度に基づいている場合、優先度の高いスレッドがロックを要求し続ける限り、優先度の低いスレッドは枯渇します。

たとえば、JavaのカウントSemaphoreは、作成時に「公平」であるかどうかを構成できます。ここで、「fair」とは、待機中のスレッドがFIFOに入れられ、最も長く待機したスレッドが最初に実行されることを意味します。

于 2012-05-21T12:41:40.013 に答える