タスクAで読み書き、タスクBがそれを読むとします。
この時、双方のタスクでセマフォでの保護は必要でしょうか?
(タスクBは、読むだけです)
(OSは、Winに限定しません)
Producer-Consumer問題を念頭にしているのかと最初は思ったのですが、その状況とは違うということでいいのですよね?
話が抽象的で実現したいことは正確には分からないですが、質問に書いてあることだけから判断するのであれば、タスクAでの処理は排他制御する必要がある場合も、ない場合もあると思います。
例えば、タスクBにおいて、変数Xが最新の値を必ず取得する必要があるのであれば、何らかの仕組みで、排他制御をしないといけないでしょう。
逆に、1つ前の状態の値などでもよい、複数回同じ値を読んでもよいのであれば、そもそも排他制御する必要はないでしょう。
ただし、変数がアトミックな命令で割り当てられないのであれば、排他制御しないと問題になります。
例えばですが、C++でプログラムを書いていて、
X = new SomeClass();
のようなグローバル変数を扱うのであれば、排他制御しないと、オブジェクトが中途半端に構築された状態で、タスクBからアクセスされることとなり、問題になります。
何かの参考になれば。
ありがとうございます!
えと、例えば タスクAからタスクB内のループを終了させたいので
変数Xに 999を入れたいのです。
タスクBは、ループ内で変数Xを監視して 999が入ってたら終了します。
この時、セマフォで保護しないと 999を代入している間に
中途半端な状態で、タスクBが変数を読んでしまわないか?
という心配ですが、どうでしょう???
(このケースでは、中途半端な数字になっても問題はありませんが)
イベントフラグを使うのが正しいのかもしれませんが、セマフォのお勉強という意味で。