【せいさんしゃしょうひしゃもんだい】
生産者-消費者問題 とは?
最終更新:
💡 作る側と使う側を、共有バッファでつなぐ
データを作る生産者と、取り出して処理する消費者が、共有バッファを介して協調する並行処理の問題。容量が有限なら満杯・空の条件を扱い、共有状態を競合なく更新する必要がある。
📌 このページのポイント
生産者-消費者問題って何?
プログラミングでは、どんな場面に出てくるの?
どうやって同期するの?
一つの方法は、空き数とデータ数を数えるセマフォに、共有状態を守るロックを組み合わせることだよ。空きやデータを待ってからロックを取る順序が大切。相手が必要とするロックを持ったまま待つと、互いに進めなくなることがあるんだ。
もっと簡単に書ける方法はないの?
バッファは満杯なら必ず待つもの?
サイズはCPUコア数の数倍くらい?
共通の目安としては決められないよ。データ一件の大きさ、到着の集中、処理速度、許容する待ち時間などによって変わる。容量を増やしても、消費側が継続的に追いつかない問題自体は解消しないので、負荷を測って調整するんだ。
📖 おまけ:英語の意味
「Producer-Consumer Problem」 = 生産者-消費者問題
💬 Producerは作る側、Consumerは受け取って使う側を表すよ。速度の違う処理同士が、共有バッファを介してやり取りするときの調整を考える問題なんだ。