整型信号量与记录型信号量

本文介绍了整型和记录型信号量的概念及其使用。通过wait和signal操作,信号量可用于实现进程间的同步和互斥。例如,利用信号量为0初始化可以确保进程的互斥访问临界资源;而在实现前驱关系时,通过恰当的V和P操作协调进程执行顺序。分析进程同步和互斥问题通常涉及设置和调整信号量的值以及理解等待队列的工作原理。
摘要由CSDN通过智能技术生成
信号量机构是一种功能较强的机制,可用来解决互斥与同步的问题,它只能被两个标准的原语wait(S)和signal(S)来访问,也可以记为“P操作”和“V操作”。

原语是指完成某种功能且不被分割不被中断执行的操作序列,通常可由硬件来实现完成不被分割执行特性的功能。如前述的“Test-and-Set”和“Swap”指令,就是由硬件实现的原子操作。原语功能的不被中断执行特性在单处理机时可由软件通过屏蔽中断方法实现。

原语之所以不能被中断执行,是因为原语对变量的操作过程如果被打断,可能会去运行另一个对同一变量的操作过程,从而出现临界段问题。如果能够找到一种解决临界段问题的元方法,就可以实现对共享变量操作的原子性。

整型信号量

整型信号量被定义为一个用于表示资源数目的整型量S,wait和signal操作可描述为:
  1. wait(S){
  2. while (S<=0);
  3. S=S-1;
  4. }
  5. signal(S){
  6. S=S+1;
  7. }
wait(S){
    while (S<=0);
    S=S-1;
}
signal(S){
    S=S+1;
}
wait操作中,只要信号量S<=0,就会不断地测试。因此,该机制并未遵循“让权等待” 的准则,而是使进程处于“忙等”的状态。

记录型信号量

记录型信号量是不存在“忙等”现象的进程同步机制。除了需要一个用于代表资源数目的整型变量value外,再增加一个进程链表L,用于链接所有等待该资源的进程,记录型信号量是由于釆用了记录型的数据结构得名。记录型信号量可描述为:
  1. typedef struct{
  2. int value;
  3. structprocess *L;
  4. } semaphore;
typedef struct{
    int value;
    struct process *L;
} semaphore;
相应的wait(S)和signal(S)的操作如下:
  1. void wait (semaphoreS)
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值