Qt学习(二)——多线程控制

线程之间存在着相互制约的关系,具体可分为互斥和同步这两种关系。

在程序中,通常都会用到叫做”临界资源“的东西,可能是一块内存,一个数据结构,一个文件等具有排他性使用的东西。这些东西,在多线程环境下,必须进行互斥处理,才能安全地使用临界资源。所以,对临界资源执行互斥操作的代码片段,叫做临界区。

互斥量

通常使用QMutex,QMutexLocker这两个类进行互斥操作。举一个简单的例子:

int createKey(){mutex.lock();++key;return key;mutex.unlock();}
int createKey(){QMutexLocker locker(&mutex);++key;return key;}
第一个代码片段,虽然使用了lock()操作,但unlock()操作在return之后,从而导致unlock()操作永远无法进行。

第二个代码片段locker()函数作为局部变量会在函数退出时结束其作用域,从而自动对互斥量mutex解锁。

信号量

信号量可以理解为对互斥功能的扩展,互斥量只能锁定一次而信号量可以获取多次,它可以用来保护一定数量的同种资源。信号亮的典型用例是控制生产者/消费者之间共享的环形缓冲区。

嗯生产者消费者问题,操作系统也讲过啊。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值