セマフォ
並行して動作している プロセス間で同期を取ったり割り込み処理の制御を行なう機構。 また、そのためにプロセス間で交換される信号。
もともとは「腕木信号」の意味。
特に、複数のプロセスでメモリ領域やディスク上のファイルを共有している場合に、同時にアクセスして内容の破壊や不整合が起きるのを防ぐために使われる。 Dijkstraによるセマフォ(Semaphore)
非負の整数変数:s
P(s)操作:s>0になるまで待ってs=s-1
V(s)操作:s=s+1
不可分な操作
臨界領域に入る前にP操作、出るときにV操作
2進セマフォ(binary semaphore)、mutex
0:誰かが臨界領域に入っている
1:臨界領域にはプロセスはいない
汎用・計数セマフォ(general・counting semaphore)
任意の非負の値を取る
資源割付けを制御するときに有効
初期値は資源の数(同時に臨界領域に入れる数)
P操作
資源を獲得したいプロセスはセマフォ変数をチェックする。 S≠0の時、セマフォ変数を-1して資源を獲得する。 S=0のとき、資源の空きを待つ。
Passeren = 腕木を下げる(通行許可)
V操作
セマフォ変数を+1して排他を解除する。
Verhoog = 腕木を上げる(通行禁止)
Reentrant mutex, which can "count" but in a different manner to a counting semaphore.
Asynchronous semaphore