セマフォ
セマフォ(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. セマフォ
参考
メモ