バイナリセマフォ
セマフォだよ
「0」か「1」の値しか取らないよ
最大同時アクセス数が「1」になっているよ
簡単に書くよ
バイナリセマフォ(英:binary semaphore)とは
セマフォ(排他制御の話で登場する仕組みで「あと何人の人が使えるよ」を表した数字)の分類のひとつ
であり
同時に使える人の数が「1」になっていて「0」か「1」の値しか取らないセマフォのこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・バイナリ
・排他制御
・セマフォ
について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
今回、登場する「バイナリ」は「2つのほげほげ」「1組のほげほげ」「2進数のほげほげ」的な意味です。
0と1やonとoffで表現できる何かですかね。
排他制御は「ダブルブッキングしないようにすること」です。
同時に使われるとマズい(おかしくなる)ものに組み込む仕組みで、1つの物を同時に使わせないための工夫です。
セマフォは「『あと何人の人が使えるよ』を表した数字」です。
ちょっと小難しい言い方をすると
共有資源に対するアクセス可能な数を示す値
です。
資源にアクセスする度にセマフォの値を増減することで、排他制御を実現します。
例えば、そうですね。
ピヨ太君が握手会を開催することにしました。
ピヨ太君には左手と右手があります。
両手を使えば、同時に2人の人と握手できます。
そこで、ピヨ太君のマネージャは「ピヨ太握手可能人数:残り2名」と黒板に書きました。
さてさて、握手会の始まりです。
サクラとして雇われたピヨ子さんが握手をしに来ました。
ピヨ太君はピヨ子さんと握手をしています。
ピヨ太君の片手がピヨ子さんとの握手に使われています。
ピヨ太君は片手のみ空いている状態です。
あと1人の人と握手できます。
ピヨ太君のマネージャは「ピヨ太握手可能人数:残り1名」と黒板の内容を書き換えました。
おっと、また誰か握手をしに来たようです。
今度は、冷やかしでやってきたアクマ君でした。
ピヨ太君は、ピヨ子さんと握手している手とは逆の手で、アクマ君と握手をします。
これでピヨ太君の両手はふさがりました。
ピヨ太君のマネージャは「ピヨ太握手可能人数:残り0名」と黒板の内容を書き換えます。
おっと、またまた誰か握手をしにやってきました。
今度はピヨ太ママがやってきたようです。
ピヨ太君、意外と人気者ですね。
でも、残念。
今は「ピヨ太握手可能人数:残り0名」です。
仕方がないので、ピヨ太ママには待っていてもらいます。
おっと、ピヨ子さんが空気を読んだようです。
ピヨ太ママが待っているのを察して、帰って行きました。
ピヨ子さんが帰ったので、ピヨ太君の片手が空きました。
ピヨ太君のマネージャは「ピヨ太握手可能人数:残り1名」と黒板の内容を書き換えます。
そういえば、ピヨ太ママが待っていましたね。
早速ピヨ太ママが握手をしました。
ピヨ太君のマネージャは「ピヨ太握手可能人数:残り0名」と黒板の内容を書き換えます。
このお話に登場した黒板の内容
ピヨ太握手可能人数:残り○名
がセマフォです。
セマフォは「あと何人使えますよ」を表す数値です。
誰かが使い始めたら、値から「1」引きます。
使い終わったら「1」足します。
セマフォの値が0になったら、そいつはもういっぱいいっぱいです。
それ以上の人数で使うのはダブルブッキングになってしまいます。
そこで、セマフォの値が0の場合は、誰かが使い終わって1以上に戻るのを待ちます。
このような仕組みで排他制御を実現するのがセマフォです。
以上を踏まえて
「あと何人の人が使えるよ」の最大値が「1」に設定されているので「あと『1』人の人が使えるよ」か「あと『0』人の人が使えるよ」にしかならないセマフォ
が「バイナリセマフォ」です。
先ほどのピヨ太君の握手会の様子を思い出してください。
ピヨ太君には両手があります。
最大で、同時に2人の人が握手できます。
ピヨ太君が片腕を骨折して1人の人としか握手できなくなったのがバイナリセマフォです。
バイナリセマフォは
1.握手していない(残り:1名)
2.握手している(残り:0名)
の2つの状態しか取らないセマフォです。
一言でまとめるよ
まぁ「バイナリセマフォ」って単語が出てきたら「『0』か『1』しか値を取らないセマフォ(排他制御の話で登場する仕組みで「あと何人の人が使えるよ」を表した数字)なんだな~」と、お考えください。
おまけ
■訳してみるよ
「binary(バイナリ)」の意味は「2値の」とか「2進法の」とか「二元の」とかです。
「semaphore(セマフォ)」の意味は「手旗信号」とか「信号装置」とかです。
ただし今回はIT用語の「セマフォ」を指しています。
何となくくっつけると
2値のセマフォ
となります。
■検索してみる?