※ ChatGPTを利用し、要約された質問です(原文:スレッドとコンテナ)
スレッドとコンテナを共有する際の注意点とは?
このQ&Aのポイント
複数のスレッドでひとつのコンテナを共有する場合の注意点について教えてください。
クラスにmapをメンバとして持たせ、更新・ダンプのメソッドを別々のスレッドとして起動させる方法についても教えてください。
mapを更新する際にイテレータを再取得しないと問題が生じる可能性についても知りたいです。
ひとつのコンテナを複数のスレッドで共有する場合について教えていただきたいです。
例:
--------------------------------------------------
map Aを更新するスレッドthr1、
map Aのおおよその状況をファイルにダンプするスレッドthr2、
というコードを記述したいです。
thr2について、「おおよそ」というのは、thr1がAをどんどん更新(insert, erase)するので、
イテレータ取得した時刻やイテレータを++したタイミングに影響を受けて、Aの特定の瞬間を丸々きれいにダンプできなくてもイイや別に、という意味です。
(丸々ならよりよいのですが。)
--------------------------------------------------
クラスにmapをメンバとして持たせ、同様に更新・ダンプのメソッドも持たせ、
このメソッドを別々のスレッドとして起動させて、参照はイテレータを利用すれば実現できるかなぁ、と思っていたのですけど、調べると「だめかも」しれない、と思えてきました。
先ずはこの点、どうなのでしょうか?★
mapを更新すると、その瞬間、イテレータを再度取得しなおさないと、未定義の動作かアクセス違反的な難しいことになりそうです。
今回の例を実現するには、いちいちmapをロックしないとならないでしょうか?★
お礼
epistemeさん、いつもありがとうございます。 mapの更新アクセスの際はロックしてからの利用とします。 参照するスレッドはロックしてから複製したmapに対して参照をかけることにします。