QT-线程Mutex学习

QMutex有三个函数
**一、lock()**作用锁定互斥量,如果一个线程中锁定了该互斥量,那它将阻塞到另一个线程解锁这个互斥量
**二、unlock()**解锁互斥量
**三、trylock()**视图锁定一个互斥量,如果成功返回true,如果其他线程已经锁定了该互斥量,则返回false,但不阻塞

例如:子线程B中有这样一段代码

		mutex.lock()
		代码段甲;
		mutex.unlock()
主线程A中中有这样一段代码
		if(mutex.trylock())
		{
		代码段乙;
		mutex.unlock();
		}

我们可以将代码段甲,代码段乙分别看做两个人甲和乙,互斥量mutex看作一个厕所,厕所里只有一个坑位(只有一个线程能访问mutex)。现在甲和乙要去上厕所,由于甲和乙跑去厕所的速度(线程运行速度)不一样,会产生两种情况
一:甲比乙快。甲先到厕所(子线程B先执行到mutex.lock前面一行),乙后到。甲先进了厕所并锁好门(子线程B执行mutex.lock),此时乙试图打开厕所(乙执行到mutex.trylock),但是打不开。只能放弃,乙没上厕所就走了。
二:甲比乙慢。乙先到厕所并试图开门(主线程A先执行到mutex.trylock),此时厕所没人,乙可以进去。在此同时,甲到了,由于厕所被占了,甲进不去,只有在厕所外一直等乙(执行到mutex.lock阻塞)。乙上完厕所后,打开门(mutex.unlock),好了厕所空了,甲能进去了。甲上完厕所后顺便关上了门(mutex.lock)

你可能感兴趣的:(QT)