同步和异步(我们必须理解同步和异步不是两个独立的问题,而是一种问题两种的处理方式、方法。

异步就像发短信一样
同步就行打电话一样

同步:进程A和进程B,进程A对B发出一个请求后,等待B的响应。待B响应后再继续完成后面的事情
异步:进程A和进程B,进程A对B发出一个请求后,继续完成后面的事情(即不等待),B响应后,通知A,然后A再来处理

同步:互锁 

异步:不互锁

同步:阻塞模式

异步:非阻塞模式

“尽管所有的生产者进程和消费者进程都是以异步方式运行的,但他们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品的缓冲区投放产品”、

生产者进程和消费者进程 是以异步的方式进行,一个进行生产,一个进行消费,谁也不用等谁,不需要生产者生产出一个物品后,非要等消费者拿走后才能继续进行生产。 而这里同步是一个条件限制,在这个时候他们必须是同步的,即当缓冲池是空的时候,消费者必须等待有物品才能取,缓冲池满了,生产者必须等有空位置才能继续放物品。

同步就是互锁 异步就是不互锁
对于线程A和线程B的互锁变量a,线程A B不能同时调用

定义并初始化商品数量为int a=0;
定义线程A模拟生产者 a++
定义线程B模拟消费者 a--
理论上 生产和消费是不同的行为 应该异步
但如果异步 那么如果线程A抢占较多 则最终a将越界 反之a将小于0 最终也会越界
还有个隐患就是 线程B执行的时候a可能是负值 但随之系统被线程A长期抢占使得a重新为正
或者线程A执行的时候a可能超过仓库允许存放最大量比如1000 但随后线程B长期抢占cpu使得a重新小于1000
但是实际生活中没有商品了 消费者就无法购买 仓库存不下了 再生产就没地方放或者需要再投资租仓库(这个仓库也许用不了两天就空了 使得投资浪费)

所以这种情况下应该让生产和消费这两种不同的行为互锁 即
当a>=1000时 线程A进入休眠 释放cpu给线程B 
当a<=0时 线程B休眠 让给线程A
这样设计才合理.

直接互相制约关系:同步(进程间的合作,有先后顺序

间接互相制约关系:异步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值