C++ 线程安全与 const 函数

问题描述 投票:0回答:1

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

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

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

谢谢

c++ multithreading thread-safety const-correctness
1个回答
3
投票

您创建了作用域锁,但随后立即销毁它,因此它无法保护您对

m_value
的访问。你想要这个:

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

现在,锁保留在范围内,直到访问

m_value

您可能还想声明锁

mutable
,以便可以在
const
成员函数中访问它。

© www.soinside.com 2019 - 2024. All rights reserved.