共有メモリへの独立した同時書き込みによる問題

共有メモリへの独立した同時書き込みによる問題

実際、共有メモリへの独立した同時書き込みが原因で発生する問題は疑問に思います。

さらに詳しくは、3つのプロセス(proc1、proc2、proc3)があるとします。この3つのプロセスは、共有メモリIPCベースのリングバッファを使用しようとします。 proc1がリングバッファへの同時書き込みを行い、ロックを獲得すると、ロックを待つproc2とproc3に何が起こりますか? proc1は明らかにproc2とproc3をブロックし、他の活動を防ぎます。

上記のシナリオで私たちが直面しているすべての問題は何であり、効果的な解決策は何であるかを説明するのに役立つ人がいますか?

よろしくお願いします!

ベストアンサー1

これら3つのプロセスの問題は、お互いのデータを破壊する可能性があることです。リングバッファには、読み取りインデックス変数、書き込みインデックス変数、および10の位置があります。

インデックス変数が位置#4を指しているとします。

プロセス1がバッファに追加したいと仮定する。したがって、プロセス1は書き込みインデックス変数を検索し、そのデータを位置4に書き込んでから書き込みインデックスをインクリメントして#5になります。今まではそんなに良くなった。

今、プロセス2と3の両方がバッファに追加されようとしています。プロセス2は書き込みインデックスを検索し、#5をチェックする。プロセス3は書き込みインデックスを検索し、#5もチェックする。その後、プロセス2はそのデータを場所5に書き込みますが、そのデータはプロセス3によってすぐに削除されます(最終的には同じ場所が表示されます!)。最後に、プロセス 2 と 3 の両方が書き込みインデックスをインクリメントします。タイミングと特定の実装に応じて、書き込みインデックスは6または7になります。

この問題に対する1つの解決策は、全体の作業をアトミックにすることです。つまり、プロセス3は、プロセス2が完了するまでリングバッファで何もできません。それがまさにロックの目的です。

おすすめ記事