回答編集履歴
1
回答が中途半端な状態で送信されてしまったので修正
answer
CHANGED
@@ -6,7 +6,8 @@
|
|
6
6
|
|
7
7
|
具体的には、manを見て使い方を探るしかない気がします。
|
8
8
|
例えば [semop(2)のmanページ](https://linuxjm.osdn.jp/html/LDP_man-pages/man2/semop.2.html) には、「セマフォの値が0になるのを待って1に変える」というサンプルが載っています。
|
9
|
-
これ
|
9
|
+
これは2操作同時の例なのでちょっと多いですが、1操作だけにして「セマフォの値が0なら共有メモリに書いてて良い、だから0でなければ0になるまで待つ、共有メモリへの書き込みが終わったら読んでいいことが分かるように1に変える)」という方法で、排他制御が可能です。
|
10
|
+
※読み込み側は逆に、1になるのを待ってから読み込み、終わったら0に変えるという感じ
|
10
11
|
|
11
12
|
なお、セマフォの初期化については注意が必要です。プログラム起動的に順序関係がある ( 起動コマンド順が、という意味ではなくて、片一方からもう一方を posix_spawn/fork+exec するような順序の意味 ) なら良いですが、どっちが初期化するべきか、もう初期化されているのか、判断する必要があるからです。
|
12
13
|
それについては [semget(2)のmanページ](https://linuxjm.osdn.jp/html/LDP_man-pages/man2/semget.2.html)の「セマフォの初期化」を参考にどうぞ。
|