セマフォ
セマフォ(semaphore)
「エドガー・ダイクストラ」によって考案された
セマフォの操作は「P操作」、「V操作」がある
P操作: セマフォの獲得
オランダ語で“通行する”を意味するPasserenの略
Prolagen?
P操作で減算処理をする
$ S ← S - 1
資源をロックする
V操作: セマフォの開放
オランダ語で“腕木を上げる”を意味するVerhoogの略
Verhogen?
V操作で加算処理をする
$ S ← S + 1
資源をアンロックする
2値セマフォ(binary semaphore)
セマフォの値が0か1のみとるもの
バイナリセマフォでセマフォの動きを考える
1. セマフォ$ S の初期値は1
2. タスクAがP操作をすると減算($ S ← S - 1 )して$ S = 0 になる
3. 資源をロックする
4. タスクBがP操作をしようとする。しかしセマフォ$ S が0なのでキューに積まれる。 5. タスクAの処理が終わってV操作をして加算($ S ← S + 1 )する。$ S = 1 になる。
6. 資源をアンロックする
7. キューに積まれていたタスクBがdequeueされ実行可能状態になる
8. タスクBがP操作をして減算($ S ← S - 1 )して$ S = 0 になる。
9. 資源をロックする
k-相互排除というのがある
最大k個のプロセスが共有資源にアクセスして良い場合のこと
セマフォの実装仕様、または実装
関連
確認用
Q. セマフォ
参考
メモ