我只是想实施this answer about mutexes with over 100 upvotes。我所做的只是复制粘贴代码,以便我的类读取(简化)如下:
mymutexclass.h
class MyMutexClass {
public:
void write( uint32_t id, const std::string &str );
std::string read( uint32_t id ) const;
private:
boost::shared_mutex _access;
std::map<uint32_t, std::string> strings;
};
mymutexclass.cpp
void MyMutexClass::write( uint32_t id, const std::string &str ) {
boost::unique_lock< boost::shared_mutex > lock(_access);
strings[id] = name;
}
std::string MyMutexClass::read( const uint32_t id ) const {
boost::shared_lock< boost::shared_mutex > lock(_access); // ERROR HERE
if( strings.count( id )>0)
return strings.at(id);
else
return "No value.";
}
我收到错误,仅针对读取互斥线:
error C2664: 'boost::shared_lock<Mutex>::shared_lock(const boost::shared_lock<Mutex> &)' : cannot convert parameter 1 from 'const boost::shared_mutex' to 'const boost::shared_lock<Mutex> &' D:\... path ...\mymutexclass.cpp
我完全迷失了错误 - 它抱怨的类型有什么区别?我的意思是这些,来自错误:
const boost::shared_mutex
const boost::shared_lock<Mutex> &
我做错了什么?这个相关的答案被提升了100次,所以我想这很可能是正确的。
答案 0 :(得分:6)
由于您的方法具有const
签名,因此不允许更改互斥锁状态,因此不允许您锁定它。将互斥锁更改为mutable
应该可以解决错误:
mutable boost::shared_mutex _access;