互斥 互斥的解决方案

互斥的作用:保护数据的完整性
进程间通信会引起死锁,(两个都等互相发消息过来),可能会有饥饿现象

互斥的要求:
一次只允许一个资源去使用临界起源
在非临界区终止了这个进程的执行,也不能影响其他进程
不允许在互斥的时候产生死锁与饥饿
如果没有进程在访问临界区,那么就立马把申请的进程拿进去使用

互斥条件:空闲让进
忙则等待
有限等待
让权等待

互斥的解决方案:软件、硬件、信号量、Monitors(管权)、信息传递;
硬件方法:
1.屏蔽中断:独占资源,代价很高,遇到紧急情况无法去解决,多处理器其他处理器也会来竞争
2.专用机器指令:一个指令和另一个指令之间避免了冲突(test set、exchange)两个都能够控制任意多个进程
缺点:出现忙等,消耗了处理机的时间
可能出现饥饿现象
可能会产生死锁

Semaphores(信号量):一种用来进程之间交换信息的特殊变量
Wait(s)、signal(s)是对信号量操作的原语,是一段代码,在执行操作时不能被中断;
信号量包含一个整形量,可以被初始化为一个非负整数;
Wait操作对信号量做递减操作:wait(s):S-1 wait操作:申请资源且可能阻塞自己(s<0)
signal操作对信号量做加法操作:signal(s):S+1 signal操作:释放资源并唤醒阻塞进程(s<=0)
General Semaphore(通用信号量):是记录型,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)
Binary Semaphore(二进制信号量):只能是0、1

信号量的类型:互斥信号量、资源信号量
互斥信号量用于申请或释放资源的使用权,常初始化为1
资源信号量用于申请或归还资源,可以初始化为大于1的正整数,表示系统中某资源的可用个数
Wait操作用于申请资源(或使用权),进行wait原语时,可能会阻塞自己;
Signal操作用于释放资源(或归还资源使用权),进程执行signal原语时,有责任唤醒一个阻塞进程

信号量的意义:
1.互斥信号量:申请/释放使用权,常初始化为1
2.资源信号量:申请/归还资源,资源信号量可以初始化为一个正整数

操作系统内核通过系统调用形式提供wait和signal原语,应用程序通过系统调用实现进程间的互斥
工程实践证明,利用信号量方法实现进程互斥是高效的,一直被广泛采用。

生产者消费者问题:
生产者:产生数据并将数据放入缓冲区(buffer)
消费者:一个消费者一次取一条数据
注意:1.进程先申请资源信号量,再申请互斥信号量,顺序不能颠倒。
2.对任何信号量的wait与signal操作必须配对。同一进程中的多对wait与signal语句只能嵌套,不能交叉。
3.对同一个信号量的wait与signal可以不在同一个进程中。
4.wait与signal语句不能颠倒顺序,wait语句一定先于signal语句。

读者写者问题:
可用于解决多个进程共享一个数据区(文件、内存区、一组寄存器等),其中若干读进程只能读数据,若干写进程只能写数据等实际问题。
读者优先:一旦有读者正在读数据,允许多个读者同时进入读数据,只有当全部读者退出,才允许写者进入写数据。(写者容易饥饿)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值