标签:线程锁 相互 多线程 问题 状态 程序 info 竞争 安全
值得思考的问题:
多个线程除了在时序上可能产生相互依赖,在其他方面是否也可能产生相互依赖呢?
生产消费者问题:
-有n个生产者同时制造产品,并把产品存入仓库中
-有m个消费者同时需要从仓库中取出产品
-规则:
当仓库未满,任意生产者可以存入产品
当仓库未空,任意消费者可以取出产品
编程实验:生产消费者问题
临界资源(Critical Resource)
-每次只允许一个线程进行访问(读/写)的资源
-线程间的互斥(竞争)
-多个线程在同一时刻都需要访问临界资源
QMutex类是一把线程锁,保证线程间的互斥
-利用线程锁能够保证临界资源的安全性
QMutex中的关键成员函数
-void lock()
当锁空闲时,获取锁并继续执行
当锁被获取,阻塞并等待锁释放
-void unlock()
释放锁(同一把锁的获取和释放必须在同一线程中成对出现)
QMutex使用示例
QMutex mutex;
mutex.lock();
//do something with critical resource
mutex.unlock();
注意:如果mutex在调用unlock()时处于空闲状态,那么程序的行为是未定的。
解决生产者消费者问题:
标签:线程锁 相互 多线程 问题 状态 程序 info 竞争 安全
原文地址:https://www.cnblogs.com/-glb/p/13381974.html