操作系统学习笔记-信号量及PV操作与进程互斥和消费者生产者问题

这篇博客介绍了操作系统中如何使用信号量和PV操作解决多进程的互斥问题,以防止临界区数据混乱。通过举例银行ATM取款机的场景,解释了为何需要进程互斥以及Dijkstra的信号量方法如何实现这一目标。此外,还探讨了生产消费者问题,指出简单的计数方法存在的问题,以及PV操作如何巧妙地解决这个问题,确保了缓冲区操作的正确性。
摘要由CSDN通过智能技术生成

最近双改变了兴趣方向,正在coursera上学习操作系统这门课程

看到了关于多进程的互斥问题

大体就是说考虑到多进程的程序可能会共用共同的某一部分内容,这部分称为临界区

但是由于cpu的调度,如果有两个进程A,B

A在使用临界区的时候,由于种种原因被下CPU换成了B上CPU执行

但是这个时候A对临界区的操作还没有完成与保存,与此同时B又开始了对临界区的操作

这样势必会造成临界区数据的混乱

举个例子

银行的两个ATM取款机(进程AB)上同时在对一个银行账户操作(临界区)

ATM机的逻辑是这样的

ATM(count, val){//账户 取现金额

read(count) //读入账户数据

if(count>val){ //如果账户余额充足

count -=val;

}

write(count)//将剩余余额写入

}


比如说这个账户一共有5000元,首先一个人在A上取现2000,但是在取现后写入之前

另一个人在B上同样取现了1000,这个时候A就被暂停运行了,此时的count还没有被重写

B机器上还是读到有5000的余额,取后还剩4000&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值