Nya*_*uko -2 c++ qt multithreading
我是多线程编程的新手,但我正在研究其他人的大项目.在代码中,他有一个单例类,它有一些公共成员变量和一个成员互斥.他在不同的线程中使用这个单例,如:
singleton::instance()->mutex.lock();
singleton::instance()->value = getval();
singleton::instance()->mutex.release();
Run Code Online (Sandbox Code Playgroud)
这是安全的方法吗?如果不是在单例中读取/写入值的正确方法是什么?
不这样做是不安全的.
问题是互斥锁是分发给用户的.无法保证此锁定将被释放.例如,如果getval()抛出异常会发生什么?
这样做的正确方法是在你的单例的API中嵌入互斥量.例如:
void singleton::setvalue(int val) { // example supposing value is an int
std::lock_guard<std::mutex> mylck (mutex);
value = val;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,使用了本地std :: lock_guard.此对象锁定互斥锁并在销毁时将其解锁.这确保了在任何情况下,只要函数返回并且即使抛出异常,互斥锁也将被解锁.
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |