ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
並行して動作するプロセス間で、同期をとったり、排他制御をするための機構。
セマフォの配列への操作処理(値の参照から更新またはブロッキングまで)はOS側でアトミックに行なわれることが保証されており、他のプロセスからの処理が割り込むことはない。
これは、排他制御処理における重要な前提である。
バイナリセマフォは0か1のどちらかの値しか持たないセマフォで、重要度の高い処理のブロックに用いられる。
フラグは初期化によって最初1はセットされ、特定のプロセスが処理開始時にAPIを呼びフラグをデクリメント(−1)し、処理の終了と共にAPIを呼びインクリメント(+1)する。
他のプロセスがこれを同時に処理しようとすると、フラグが0になっているためにデクリメントに失敗して処理がブロックされ、そのプロセスはOSレベルで休止状態にされる。後に処理が完了しフラグが1に戻ると、プロセスキューに溜められた休止中のプロセスがOSによって順にチェックされ、処理が再開される。
なお、フラグ操作に失敗したときに自動的にプロセスを休止しないノンブロッキング指示を与えることもでき、この場合のプロセスの挙動はプログラム側に委ねられる。
汎用セマフォはカウンターであり、資源に一定の空き数がある場合に利用される。
基本的に値は資源の空き数に設定され、特定のプロセスが処理開始時に値のデクリメント(−1)を行ない、処理終了時にインクリメント(+1)を行なう。空き数を使い切り、デクリメントに失敗した場合のブロッキング処理はバイナリセマフォと同様である。
μITRONを初めとするTRONでは、バイナリセマフォに対応している。
実装により仕様差はあると思われるが、非常にシンプルなもので、概ね次のように書かれる。
#define SEM_TEST 1; // セマフォID(プログラマーが衝突しないように管理する)
wai_sem(SEM_TEST); // セマフォを取得
;;;; // 処理
sig_sem(SEM_TEST); // セマフォを返却
TRONの仕様では、wai_sem()からsig_sem()までがアトミックであることが保証されている。
実装によっては、wai_semの第二引数でタイムアウトの時間を設定でき、ブロッキングしない動作が可能なものもある。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます