2 つのスレッドがあり、それぞれに同じ std:map 変数と std:vector 変数を操作する関数があります。
これらの変数を保持する最良の方法は何ですか。
ありがとう
2 つのスレッドがあり、それぞれに同じ std:map 変数と std:vector 変数を操作する関数があります。
これらの変数を保持する最良の方法は何ですか。
ありがとう
操作の種類によって異なります。保存された値を上書きするだけですか、それとも要素を挿入/削除しますか? 前者の場合、コンテナーの特定の要素のみをロックできますが (たとえば、std::mutex
各要素内に a を埋め込むことによって)、後者の場合、各操作中にコンテナー全体をロックする必要があります。
普遍的な最善の方法はありません。それに応じてミューテックスをロック/ロック解除する1つの関数を介して、同期された構造へのすべての読み取り/書き込み呼び出しをサニタイズする必要があります。複数の関数がある場合がありますが、それらはすべて同じ共通ミューテックスで動作する必要があります。
ストレージ クラスを持ち、マップとベクトルをプライベート メンバー変数として保持することをお勧めします。ミューテックスをロック/ロック解除し、読み取り/書き込み呼び出しを実際のマップまたはベクトルに転送する転送関数をそのクラスに書き込みます。実際の構造にアクセスするためのドアの数は限られています。そして管理しやすくなります。
boost::mutex
そのクラスのメンバー変数として使用できます。