生产消费者 Lock处理方式纯语言概述

本文介绍了一个典型的生产者-消费者模型,并详细解释了如何通过线程间的同步机制来保证数据的一致性和线程安全性。通过使用Lock对象及其提供的条件变量,文章展示了如何在多线程环境中协调生产者与消费者的活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源

     数量

     生产方法

     消费方法

生产者  实现Runnalbe接口

 

 

消费者 实现Runnalbe接口

由于生产和消费各一个或者多个线程,我们希望的结果是生产一个 消费一个,为了实现这个目的必须要,生产的时候保证消费者是Wait的

消费的时候保证生产时Wait的 

定义一个标记再生产和消费之前都判断这个标记,如果这个比较为True则生产等待,消费进行消费

 

消费完毕后将标记改为False,同时唤醒生产者

 

生产运行的时候判断标记如果为false则开始生产 生产完毕后修改标记为True

 

另外代码需要同步

 

 

但是如果多个线程进行生产和消费还是会产生线程安全问题,因此处理方式是   首先声明一个Lock对象

Lock对象最重要的就是其对应的监视器对象,其实等待和唤醒都是依赖监视器对象的。

Lock.conndition()可以获得该对象对应的监视器。

同一个锁可以制定不同的监视器

不同监视器对象可以负责不同线程的唤醒和wait操作,所以只要把不同的任务,放在不同的监视器上就可以实现唤醒和等待对应的对象是不同的

 

lock.lock()加锁

 

lock.unlock()解锁

 

转载于:https://www.cnblogs.com/hysys32/p/6700454.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值