进程同步之生产者消费者问题

文章目录生产者消费者问题如何避免——竞争条件peterson solution硬件可以控制中断(关中断)核心问题:当多线程多进程的编程时,只要有共享的数据(内存)被访问,数据就有可能被破坏。生产者消费者问题生产者往缓冲区写数据,消费者读数据,缓冲区有限制,一个只能读,一个只能写,且速度不一样。count记录现在缓冲区的数据,这是两个进程中共享的变量,缓冲区最多可放BUFFER_SIZE个...
摘要由CSDN通过智能技术生成

核心问题:当多线程多进程的编程时,只要有共享的数据(内存)被访问,数据就有可能被破坏。

生产者消费者问题

生产者往缓冲区写数据,消费者读数据,缓冲区有限制,一个只能读,一个只能写,且速度不一样。
在这里插入图片描述
count记录现在缓冲区的数据,这是两个进程中共享的变量,缓冲区最多可放BUFFER_SIZE个数据。
对于生产者而言,当count的数量和最大值相等时不做任何事,count一开始是0。
对于消费者而言,当count的数量和0相等时不做任何事。
在这里插入图片描述
在这里插入图片描述

count ++ 的汇编执行过程(3条指令)
先把内存中的值读入寄存器,寄存器执行+1,然后写回去=count。
多进程同时运行,发生切换时的这个点有规律吗?随时都有可能。切换的触发由中断引起,指令执行完才会触发中断(切换)。

蓝色是count++,红色是count–执行过程。当第一次count执行++时,在寄存器一+1指令完成后,要发生count–指令,此时的count还没来得及+1,就把初始值5给力寄存器二。
在这里插入图片描述

如何避免——竞争条件

两进程同时读不会破坏共享数据,写的时候会破坏。
临界区的保护:任意时刻不会有两个以上进程在临界区对数据操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值