次の使用法を検討してください。
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
このコードは飢餓の自由を満たしていますか(つまり、プロセスがCS内に入るのを待つ場合、最終的には成功します)?
次の使用法を検討してください。
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
このコードは飢餓の自由を満たしていますか(つまり、プロセスがCS内に入るのを待つ場合、最終的には成功します)?
これは、複数のスレッドがで待機しているときにスレッドを選択する際に使用されるポリシーに実際に依存しdown(lock)
ます。
例えば
たとえば、JavaのカウントSemaphore
は、作成時に「公平」であるかどうかを構成できます。ここで、「fair」とは、待機中のスレッドがFIFOに入れられ、最も長く待機したスレッドが最初に実行されることを意味します。