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