码迷,mamicode.com
首页 > 编程语言 > 详细

多线程间的互斥

时间:2020-07-26 22:50:37      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:线程锁   相互   多线程   问题   状态   程序   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!