整型信号量
信号量定义为一个整型量;
根据初始情况赋相应的值;
仅能通过两个原子操作来访问。
P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;
整型信号量符合“有限等待”原则
signal释放资源后,当CPU被分配给等待进程后,等待进程仍可继续执行,可以符合“有限等待”。
但整型信号量不符合“让权等待”原则
整型信号量的wait操作,当s ≤0时,当前进程会占着CPU不断测试;
信号量原语不能被打断,这个占有CPU的进程会一直不断的占据CPU循环下去,陷入忙等。
Value>0,表示当前可用资源的数量;
Value≤0,其绝对值表示等待使用该资源的进程数,即在该信号量队列上排队的PCB的个数。
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)
互斥信号量mutex初值为1;
每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间
必须成对使用P和V原语(在同一进程中),不能次序错误、重复或遗漏:
遗漏P原语则不能保证互斥访问
遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);
信号量的基本应用
实现进程互斥
实现进程间的前趋关系(有序)
///////////////////////////////////////////////
信号量题目做题一般方法:
分析问题,找出同步、互斥关系
根据资源设置信号量变量
写出代码过程,并注意P、V操作的位置
检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确。
///////////////////////////////////////////////////
在每个程序中的多个wait操作顺序不能颠倒。且应先执行对资源信号量的wait操作,再执行对互斥信号量的wait操作,否则可能引起进程死锁
网友评论