所以我有一个数据结构,可以使用rwlock确保线程安全。我有一个RAII ScopedRWLock,它在创建时锁定,在析构函数时解锁。所以对于访问器功能,我有:
int GetValue() const
{
ScopedRWLock read_lock(&m_rwlock);
return m_value;
}
现在这不起作用,因为编译器抱怨使用const的ScopedRWLock。我尝试用简单的读锁替换ScopedRWLock并读取解锁但也不起作用。所以问题是人们如何实现常规(非锁定)线程安全,同时仍然实现const-correctness?
由于
答案 0 :(得分:3)
您创建了作用域锁定,但随后立即将其销毁,因此无法保护您对m_value
的访问权限。你想要这个:
int GetValue() const
{
ScopedRWLock l(&m_rwlock);
return m_value;
}
现在,锁定仍然在范围内,直到访问m_value
。
您可能还想声明锁mutable
,以便可以在const
成员函数中访问它。