进程的同步(中)

进程的同步问题

*包含进程同步关系,互斥关系


几种同步机制(P(wait)V(signal)操作:原子操作不可分割)

一.硬件同步机制
二.信号量机制
1.整形信号量(基础,因为有缺点所以转为记录性信号量)
2.记录型信号量(重要)
3.and型信号量(会用,等待资源多时用)
4.信号量集(了解)
三.管程机制

1
1.1 信号量S:
int s;
只可以在初始化时赋值和p,v操作时改值
初始值是非负,整数:0,1,2,3,4-----------------
表示资源数目
必须赋初值
缺点:while(S<0); 这是一个忙等,表示在wait(S)里,所以如果S一直小于零,就一直cpu空循环,做不到进程释放处理机的让权等待操作

2
2.1定义信号量时用类型semaphore
2.2需要资源数目记录变量和各个阻塞队列(申请某个资源得不到后进入等待那个资源的阻塞队列)的指针变量——结构体
2.3wait操作里,资源数减了1之后再判断这个申请资源的进程进不进阻塞队列(block原语)(若原来S<=0,现在S<0),申请不到资源的进程就进入了阻塞队列就做到了让权等待,让出了处理机

signal操作里,释放了资源之后再判断要不要有唤醒操作(wakeup原语)(若原来S<0,现在S<=0就执行唤醒操作,因为要保证原来阻塞队列里有进程),释放一个可用资源
*系统里的资源

*阻塞队列里面的进程被唤醒之后进入就绪队列
2.4 S=1时可以作为互斥信号量,>1时可以作为资源信号量
*要说明S代表什么,初始值为几

3
3.1进程需要访问多个共享资源才可以正常执行
所以要设置两个信号量
共享数据必须作为临界资源,只可以被一个进程使用。
3.2为了解决的问题:两个进程会产生死锁——都进入了阻塞队列没有进程把它唤醒,除非外力作用。
3.3 Swait:进程只有在所需的资源都>=1时才可以执行,否则进入等待第一个<1的资源的阻塞队列。短路特性。
Ssignal同时释放多个资源
所以会有好多进程从阻塞队列被唤醒到就绪队列

信号量可以解决的问题——让进程合理正常运行

一 .进程互斥
二.前驱关系

使用信号量解决进程问题要考虑的三点问题:

等什么资源?
1.互斥信号量——初值=1
2.资源信号量——初值>1

在哪里等?在哪个语句等?
wait()放在哪里?等什么资源?

为其他进程考虑
signal
做完了通知其他进程
释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值