5

この質問への最初の回答を使用して、作業中の課題に役立てようとしています。許可が0のセマフォはどの程度正確に機能しますか?それは私にはあまり意味がないようです。そのセマフォで永遠の待機を作成するだけですか?その場合、セマフォに決して与えられない許可を待っている間に、スレッドがセマフォを「通過」するようにするにはどうすればよいでしょうか。

4

1 に答える 1

12

再び The Little Book of Semaphores の §2.2 から:

リスト 2.1: セマフォの初期化構文

fred = Semaphore(1)

関数Semaphoreはコンストラクターです。新しいセマフォを作成して返します。セマフォの初期値は、パラメーターとしてコンストラクターに渡されます。

したがって、作成者の疑似コードで0は、許可の数ではありません。セマフォの初期値です。ゼロの値は何を意味しますか? これは、リスト 2.1 の直後のテキストで説明されています。

値が正の場合、ブロックせずに減少できるスレッドの数を表します。負の場合は、ブロックされて待機しているスレッドの数を表します。値がゼロの場合、待機しているスレッドがないことを意味しますが、スレッドがデクリメントしようとするとブロックされます。

(強調を追加)

于 2013-02-10T01:03:18.253 に答える