我有一个我想跨多个线程同步的 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 中锁定互斥锁,即使它根本没有修改映射。有没有办法将 my_map 对象本身锁定在函数 A 中,而不是将其锁定在函数 B 中,同时保持线程同步。这样,函数 B 的所有实例/调用都可以继续自由运行,只要函数 A 没有运行?
谢谢