複数のスレッド間で同期したい 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 のすべてのインスタンス/呼び出しは引き続き自由に実行されますか?
ありがとう