dポイントプレゼントキャンペーン実施中!

ビジーウェイトによる相互制御はある変数になるまで連続的にテストする方法ですが欠点としてアイドル状態になることがないことと非生産的な点が挙げられると思います。長時間の待ちの可能性がある場合には適していません。

ここで疑問なのですが、どこが非生産的なのでしょうか?
デットロックが発生するわけでもなく働き続けているわけだから
例えば生産者消費者問題でも生産者はバッファが満杯になるまでとにかく生産しまくる。消費者は0になるまでとにかく処理しまくる。これでいいんじゃないかと

セマフォによってお互いの状態を同期しあいながらやるのと生産性は違うのでしょうか?

ご教示お願い致します。

A 回答 (2件)

マルチプロセス環境では、非生産的な仕事に計算資源を割かれてしまうため、他のプロセスがそれだけやりたい仕事を待たされてしまうという問題があります。



また、いわゆるアイドル状態とビジーウェイトの大きな違いは、CPU等の内部の状態(トランジスタのON/OFFなど)がほとんど変動しないか大きく変動するかです。前者の場合はNOPと呼ばれる内部状態をほとんど変化させないダミー命令を発行し続けたり、最近のCPUでは回路を部分的に電源団の状態にしたりしますが、後者の場合は我々人間から見ると非常に簡単な計算かもしれないけど実際にコンピュータに仕事をさせ続けていることには変わりなく電流がより多く流れるためコンピュータ(特にCPU)が熱くなりますし、電力もたくさん消費します。
    • good
    • 0

人間の仕事で考えてみれば判ると思います。


上司が部下に「○○の仕事をお願いしてください」とお願いしたときに、その仕事が終わるのを部下が報告しない場合、何度も部下の仕事の状況をチェックすることになります。
もし、部下が「仕事終わりました!」と報告することが決まっていれば、上司は、その報告があるまで、他の部下に割り振る仕事の準備や結果のチェックをこなすことができます。

上司をCPUと考えれば、連続的に何度も部下のチェックをしていたら仕事効率が悪化するのがお分かりになると思います。

ちなみに、上司の持つ部下が1名だけで、上司が自分のすべき仕事を持っていないなら、ビジーウエイトとセマフォーの生産性の差は、あまり大きくならないと思います。
そして、PC等でも同様な傾向があると思えます。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!