セマフォ

「オハジキを入れた小皿」がセマフォである。一般的に、オハジキを取る操作をP命令といい、オハジキを返す操作をV命令という。
たとえオハジキの個数を確かめられたとしても、ウカウカしていると他のコックがオハジキを取ってしまい、オハジキの個数が変わってしまうかもしれない。
だからこそ、セマフォは取ろうとすると同時に個数を調べているのだ。

http://www.tokumaru.org/techterm/semaphore.html

オハジキの個数を確かめることとオハジキを取ることがアトミックであることがセマフォのキモか。

実験

Smalltalkでやってみる。P命令がwait,V命令がsignal。

 |s|
s:=Semaphore new.
s inspect.
s signal. "1つオハジキを皿に置く"
[s wait. Transcript show: 'aaa'] fork. "オハジキがあるのですぐに実行される"
[s wait. Transcript show: 'bbb'] fork. "オハジキがもうないので待ち状態"

ここでインスペクタのexcessSignalsを見ると0になっておりオハジキがもうないことがわかる。
インスペクタの中でself signalを実行するとbbbも表示される。
もう一度self signalを実行すると、excessSignalsが1になることがわかる。
もう一度self signalを実行すると、excessSignalsが2に…(略)