【发布时间】:2018-04-09 15:34:25
【问题描述】:
我们在这里:
template<typename TK, typename TV>
class MetaAssociator
{
public:
void Set(TK key, TV const & value)
{
boost::lock_guard<boost::mutex> lock(m_Mutex);
m_Map[key] = value;
}
TV Get(TK key) const
{
boost::lock_guard<boost::mutex> lock(m_Mutex); // this one
std::map<TK,TV>::const_iterator iter = m_Map.find(key);
return iter == m_Map.end() ? TV() : iter->second;
}
private:
mutable boost::mutex m_Mutex;
std::map<TK,TV> m_Map;
};
我们真的需要在 get 函数中锁定互斥锁吗?我们只提供只读访问。如果我们不这样做呢?
【问题讨论】:
-
那么,如果在您的 setter 中写入前 8 位后,您尝试读取该值,您认为会发生什么?
标签: c++ multithreading boost mutex