era*_*lan 13 c++ const thread-safety qmutex
我有Document代表自定义文档的线程安全类.它有getter(const函数)和setter来修改它的状态.所有这些函数都受互斥保护,以保证在完全执行该方法之前文档不会更改.
但由于QMutex使用,我无法将状态访问功能标记为const不mutable使用.捕捉QMutex改变它的状态.
这段代码是正确的,还是可以用更好的方式编写?没有hacky mutable使用.
class Document
{
// This method should be const: it changes only mutex
// and don't touch document state
bool IsCorrect() const;
...
mutable QMutex m_lock;
};
bool Document::IsCorrect() const
{
// Capturing mutex object change it!
QMutexLocker lock( &m_lock );
... Const-aware code
bool result = ( m_context != NULL );
...
return result;
}
Run Code Online (Sandbox Code Playgroud)
Rei*_*ica 19
Herb Sutter 在Channel9上就这一主题进行了精彩的演讲.
与此相关的一点是,在C++ 11中,mutable已经获得了关于线程安全的新含义:"此数据成员在内部同步." 这正是互斥体的意义所在.在谈到互斥体时,赫伯甚至在谈话中说道:"它想变得可变."
因此,拥有一个mutable互斥锁并从const成员函数访问它并不是hacky,而且它实际上是主要的预期用途之一mutable.
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |