c++线程安全与const函数

C++ thread safety with const functions

本文关键字:const 函数 安全 线程 c++      更新时间:2023-10-16

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

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

现在这不起作用,因为编译器抱怨ScopedRWLock带有const。我试着用普通的读锁和读解锁代替ScopedRWLock,也不起作用。所以问题是人们如何实现常规(非无锁)线程安全,同时仍然实现常量正确性??

谢谢

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

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

现在,锁保持在作用域中,直到m_value被访问。

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