2-3进程同步(信号量)

信号量是什么?

信号量的基本应用

实现多个进程互斥(注意点)

(1)互斥信号量mutex初值为1;

(2)每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间

(3)必须成对使用P和V原语(在同一进程中),不能次序错误、重复或遗漏:

        遗漏P原语则不能保证互斥访问

        遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);

实现进程间的前趋关系(有序)(注意点)

信号量值为0的点是限制的关键所在;

成对使用P和V原语(在有先后关系的两个进程中),不能次序错误、重复或遗漏,否则同步顺序出错。

区别整型、记录型、AND型信号量以及信号量集

(1)整型信号量(符合“有限等待”原则,不符合“让权等待”原则)

信号量定义为一个整型量;

根据初始情况赋相应的值;

仅能通过两个原子操作来访问。

P操作 wait(S):

              While S<=0 do no-op;

              S:=S-1;

V操作  signal(S):  

              S:=S+1;

(2)记录型信号量

信号量结构信息发生变化

不仅要有值的处理,还有队列的处理。

此时形成记录型数据结构,包括两部分:

整型变量value(代表资源数目)

进程链表L(链接所有等待进程)

P、V操作也有所变化(熟练使用记录集型信号量,其wait,signal具体做了什么?)

P操作wait(): S.value = S.value - 1;if  S.value < 0  then  block(S,L)

V操作signal(): S.value = S.value + 1;  if  S.value <= 0 then wakeup(S,L)

(3)AND型信号量

解决思想:一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。

(4)信号量集

在大于可分配设置的下界值t前提下,每次可分配d个。

如何利用记录型信号量实现互斥关系?

如何利用记录型信号量实现前趋关系?

你可能感兴趣的:(2-3进程同步(信号量))