QMutex有三个函数
**一、lock()**作用锁定互斥量,如果一个线程中锁定了该互斥量,那它将阻塞到另一个线程解锁这个互斥量
**二、unlock()**解锁互斥量
**三、trylock()**视图锁定一个互斥量,如果成功返回true,如果其他线程已经锁定了该互斥量,则返回false,但不阻塞
例如:子线程B中有这样一段代码
mutex.lock()
代码段甲;
mutex.unlock()
主线程A中中有这样一段代码
if(mutex.trylock())
{
代码段乙;
mutex.unlock();
}
【QT-线程Mutex学习】我们可以将代码段甲,代码段乙分别看做两个人甲和乙,互斥量mutex看作一个厕所,厕所里只有一个坑位(只有一个线程能访问mutex)。现在甲和乙要去上厕所,由于甲和乙跑去厕所的速度(线程运行速度)不一样,会产生两种情况
一:甲比乙快。甲先到厕所(子线程B先执行到mutex.lock前面一行),乙后到。甲先进了厕所并锁好门(子线程B执行mutex.lock),此时乙试图打开厕所(乙执行到mutex.trylock),但是打不开。只能放弃,乙没上厕所就走了。
二:甲比乙慢。乙先到厕所并试图开门(主线程A先执行到mutex.trylock),此时厕所没人,乙可以进去。在此同时,甲到了,由于厕所被占了,甲进不去,只有在厕所外一直等乙(执行到mutex.lock阻塞)。乙上完厕所后,打开门(mutex.unlock),好了厕所空了,甲能进去了。甲上完厕所后顺便关上了门(mutex.lock)
推荐阅读
- Qt|Qt常用UI控件读取、写入方法
- Qt|Qt For Android 之启动页
- QT|QT面试
- QT安装
- qt|qt for android实现app内通过按键后台运行程序
- qt|qt for android程序保活 程序后台一直运行不被清理掉(未完)
- QWidget实现手机ipad屏幕滑屏效果
- Qt|Qt官方示例-QML Axes
- 在QT/QML中使用FontAwesome做图标显示
- QT|QtCreator2.7.0桌面快捷方式创建过程