【发布时间】:2013-07-27 17:51:48
【问题描述】:
我希望有人能就多线程如何写入一个公共容器(例如地图)提出建议。在某些线程可能使用 Boost 和 C++ 共享相同密钥的场景中
映射可能是 std::map 类型,不同的线程访问对象以修改不同的数据成员。每个线程会在点击 unique_lock 后等待当前线程完成后再继续吗?
会不会像本例那样每个线程进入临界区一样简单:
//somewhere within the code
boost::unique_lock mutex;
void modifyMap(const std::string& key,const unsigned int dataX,
const unsigned int dataY)
{
// would each thread wait for exclusive access?
boost::unique_lock<boost::shared_mutex> lock (mutex);
// i now have exclusive access no race conditions;
m_map.find(key)->second.setDataX(dataX);
m_map.find(key)->second.setDataX(dataY);
}
提前致谢
【问题讨论】:
-
std::map通常不是 hash 映射,但std::unordered_map是。
标签: c++ multithreading boost