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