同步与互斥+死锁(自学)

互斥实现办法(硬件)

中断屏蔽法:禁止一切中断发生

TSL指令:原子操作,执行时不允许被中断,读出指定标志后该标志设为真。

Swap指令;原子操作,交换两个变量的值

信号量机制(Semaphore):操作系统提供的一对原语,从而很方便的实现进程互斥,进程同步。

PV操作

双标志先检查法:检查和上锁无法一气呵成,导致两个进程可能同时进入临界区

所有的解决方案都无法实现让权等待

原语:特殊的程序段,其执行不能中断。由关中断/开中断实现。

一对原语:wait(s)原语和signal(s),s是函数调用时传入的一个参数。简称PV操作。

信号量可以来表示系统中资源的数量。

整型信号量:用一个整数型的变量作为信号量,用来表示系统中某种资源的数量。

如:某系统中有一台打印机。。。

int S=1;
void wait(int S){
    while(S<=0);
    S=S-1;}
void signal(int S){
    S=S+1;}

检查和上锁一气呵成,避免并发,不满足让权等待,不满足时一直执行那个while,如果资源不够,就一直循环等待。

记录型信号量:整型信号量的缺点是忙等,记录型数据结构表示的信号量

信号量机制实现进程互斥

1.分析并发进程的关键活动,划定临界区(如:对临界资源打印机的访问应该放在临界区)

2.设置互斥信号量mutex,初值为1.

3.临界区之前执行P(mutex)

4.临界区之后执行V(mutex)

信号量机制实现进程同步

进程同步:要让各进程有序的推进

P1,P2并发执行,由于存在异步性,因此二者交替推进的次序是不确定的。

1.分析什么地方需要实现“同步关系”,即必须保证:一前一后

2.同步信号量S,初始为0

3.前操作之后执行V

4.后操作之前执行P

 信号量机制实现前驱关系

代码要求如前驱图的顺序来执行

1.每一对前驱关系都要设置一个同步变量

2.前操作之后对相应的同步变量执行V操作

3.后操作之前相应的同步变量执行P操作

生产者和消费者问题

生产者进程每次生产一个产品放入缓冲区,消费者每次从缓冲区中取出一个产品并使用,缓冲区可以理解成一个一个的小格子。生产者消费者共享一个初始为空,大小为n的缓冲区。

 缓冲区没满,生产者才能生产,缓冲区满时,生产者必须等待。只有缓冲区空时,消费者必须等待。缓冲区是一种临界资源,必须互斥访问。如果同时访问,有可能出现数据覆盖等问题。

 互斥信号量,初始值一般为1,消费者资源消费之前需要消耗产品

semaphore mutex=1 互斥信号量,对缓冲区的互斥访问

semaphore empty=n同步信号量为n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值