セマフォ(英:Semaphore)とは、マルチスレッドプログラミングやマルチタスクプログラミングにおける排他/通知機能の一つである。
従来は、腕木信号機の意味。
セマフォは、カウンタ構造をしており、セマフォカウンタとも呼ばれる。
ある一定数以上のアクセスが制限されるリソースへのアクセス排他処理で用いられる。
セマフォはP操作とV操作と呼ばれる振る舞いを持つ。
P操作は、セマフォカウンタを-1する。
V操作は、セマフォカウンタを+1する。といった単純な振る舞いである。
セマフォは、初期値として任意のカウンタ値を持ち、これには、対象となるリソースに、同時にアクセスできる値が設定される。
たとえば、3つのスレッドが同時にアクセス出来るリソースに対し、セマフォ機構を用いるのであれば、初期値としては、3を用意する。
4つのスレッドが同時にアクセスする場合の排他処理を考えると以下のようになる。
通常、セマフォは、複数のアクセスを考慮して用いられるものであるが、
初期値を1として、同時にアクセスできるスレッドを制限する事にもよく用いられる。こういったセマフォの事を、バイナリセマフォと呼ぶ。
本来は、ミューテックスがこの機能に該当するため、ミューテックスが利用できる環境では、バイナリセマフォを用いるべきではない。
掲示板
1 ななしのよっしん
2009/06/21(日) 16:34:39 ID: E+geh/BVqP
概要の排他処理の説明の1番ですが、
セマフォのカウンタ初期値が3でP操作1回だから、セマフォのカウンタ値は2になるのでは?
2 ななしのよっしん
2013/07/18(木) 18:46:56 ID: frQKgIJXf2
>ある一定数以上のアクセスが制限されるリソースへのアクセス排他処理で用いられる。
他にも、複数のスレッドが一つのリソースに対して処理する順序が決められているときにその順序を厳守するため使う例もあるんでないの?(この場合はカウンタ値に対応した1スレッドだけリソースにアクセスする、その間他スレッド群はブロックされる)
3 ななしのよっしん
2015/12/29(火) 00:15:43 ID: RKljDDq0x5
急上昇ワード改
最終更新:2025/12/06(土) 09:00
最終更新:2025/12/06(土) 09:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。