java面试

进程互斥

2018-06-25  本文已影响2人  土豆有点

1.什么是进程互斥:
各进程之间竞争使用这些资源--这一关系称为进程互斥。
2.什么是临界资源:
系统中某些资源一次只允许一个进程使用
3.什么是临界区
给个进程中对某个临界资源实施操作的程序片段

临界区的使用原则

没有进程在临界区时,想进入临界区的进程可进入
不允许两个进程同时处于其临界区中
临界区外运行的进程不得阻塞其他进程进入临界区
不得使进程无限期等待进入临界区

进程同步:
指系统中多个进程汇总发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。如如果进程A产生数据,而进程B打印数据,则B在打印之前必须等A产生数据。

1.信号量机制
什么是信号量?

信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号的下一个进程。信号量的值与相应资源的使用情况相关。
当它的值大于0时,表示当前可用资源的数量
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。

2.PV操作
image.png

一般来说,信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

PV操作过程

分析并发进程的关键活动,划定临界区
设置信号量mutex,初值为1
在临界区前实施P(mutex)
在临界区之后实施V(mutex)


image.png
三个同步问题

生产者---消费者


image.png

说明:这里empty变量表示缓冲区还有多少个位置是空的,full表示缓冲区中被占用的个数。

作者---读者

问题:

多个进程共享一个数据区,这些进程分为两组:
读者进程:只读数据区中的数据
写者进程:只往数据区写数据

要求满足的条件:

允许多个读者同时执行读操作
不允许多个写者同时操作
不允许读者、写者同时操作


image.png

这里我们对读者计数。这虽然解决了多个读者同时读的问题,但是引出了另一个问题,就是rc变成了一个共享资源,所以我们还需要对rc进行保护,于是针对rc增加了P、V操作。

哲学家进餐

上一篇下一篇

猜你喜欢

热点阅读