具有const函数的C ++线程安全性

时间:2014-03-29 01:45:06

标签: c++ multithreading thread-safety const-correctness

所以我有一个数据结构,可以使用rwlock确保线程安全。我有一个RAII ScopedRWLock,它在创建时锁定,在析构函数时解锁。所以对于访问器功能,我有:

int GetValue() const
{
    ScopedRWLock read_lock(&m_rwlock);
    return m_value;
}

现在这不起作用,因为编译器抱怨使用const的ScopedRWLock。我尝试用简单的读锁替换ScopedRWLock并读取解锁但也不起作用。所以问题是人们如何实现常规(非锁定)线程安全,同时仍然实现const-correctness?

由于

1 个答案:

答案 0 :(得分:3)

您创建了作用域锁定,但随后立即将其销毁,因此无法保护您对m_value的访问权限。你想要这个:

int GetValue() const
{
    ScopedRWLock l(&m_rwlock);
    return m_value;
}

现在,锁定仍然在范围内,直到访问m_value

您可能还想声明锁mutable,以便可以在const成员函数中访问它。