複数のスレッド間で同期したい stl マップがあります。現在、私は...
機能A(地図修正)
void Modify(std::string value)
{
pthread_mutex_lock(&map_mutex);
my_map[value] = value;
pthread_mutex_unlock(&map_mutex);
}
機能B(マップ読み込み)
std::string Read(std::string key)
{
std::string value;
pthread_mutex_lock(&map_mutex);
std::map<std::string, std::string>::iterator it = my_map.find(key);
pthread_mutex_unlock(&map_mutex);
if(it != my_map.end())
{
return it->second;
}
else
{
return "DNE";
}
}
ミューテックスにより、これはすべてのスレッドで同期されます。ただし、マップをまったく変更していない場合でも、関数 B でミューテックスをロックする必要があります。関数 A で my_map オブジェクト自体をロックし、スレッドの同期を維持しながら関数 B でロックしない方法はありますか。このように、関数 A が実行されていない限り、関数 B のすべてのインスタンス/呼び出しは引き続き自由に実行されますか?
ありがとう