c++线程安全与const函数
C++ thread safety with const functions
所以我有一个使用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
成员函数中访问它。
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 使用 std::string () const 函数启动线程或未来
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么 const 函数返回左值而不是右值?
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 析构函数是否可以在 const 对象上调用非 const 函数
- C/C++ 如何在一次函数调用中交出 const 函数指针或简单指针
- 为什么我可以在C 11中使用const函数修改类
- 防止const函数被调用非const对象
- 如果C 中的支架重载运算符被声明为const函数
- C++:防止在 const 函数中更改指针的值
- 从const函数返回非const属性参考
- 调用指针参数从const函数指向的对象的操作员
- 在const函数中调用非CONST成员的非const函数
- 无法将 const 数据类型传递到非 const 函数中
- 这是检查 const 函数(如果是否创建某些内容)的更好方法
- 在 const 函数中从地图中未经选中读取
- 编译器不会为 "const" 和"not-const"函数给出不明确的错误吗
- 通过const函数中的参数索引返回std :: map的值