セマフォとmutex

どちらも相互排除(mutal exclusion)を実現するための仕組みに利用出来る。
仕組みが微妙に違ったり、利用用途も微妙に違ったり。


mutexはフラグを用意する。
あるプロセスが、クリティカルセクションを実行したいとする。
フラグがfalseの時、フラグをtrueにし、そのプロセスはクリティカルセクションを実行する。
フラグがtrueの時、そのプロセスは待機する。
クリティカルセクションを実行していたプロセスが終了した時、フラグをfalseにする。
よーするに、フラグを利用して、クリティカルセクションを同時に処理するプロセスの数を「1つに」制限する。


セマフォはプロセスのカウンタを用意する。
予め、同時に動作させるプロセスの最大数を設定しておく。
あるプロセスが、クリティカルセクションを実行したいとする。
カウンタが0より大きい時、カウンタをデクリメントし、そのプロセスはクリティカルセクションを実行する。
カウンタが0の時、待機する。
クリティカルセクションを実行していたプロセスが終了した時、カウンタをインクリメントする。
よーするに、カウンタを利用して、クリティカルセクションを同時に処理するプロセスの数を制限する。


まぁーという訳ですが、
http://oshiete.goo.ne.jp/qa/1470562.html
にもある通り、APIの実装によっては他にも使い分けがあったりするらしいので注意でふ。


あんまかんけーねーけど、mutexってMUTal EXclusionの略なんだってwikiをみて初めて知った。