信号量机制理解和运用

本文详细介绍了PV操作,包括P和V原语在进程互斥和同步中的作用,以及信号量如何通过整型信号量实现资源管理和进程协调。通过信号量机制,进程可以控制对临界区的访问,确保并发执行的正确性。
摘要由CSDN通过智能技术生成

PV介绍

  • P,V原语中P是荷兰语的Passeren,相当于英文的pass, V是荷兰语的Verhoog,相当于英文中的increment

  • 信号量为一个整数,我们设这个信号量为:sem。 规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。 根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零

  • p操作和v操作是不可中断的程序段,称为原语。P,V操作对于每一个进程来说,都只能进行一次。而且必须成对使用

  • P原语操作的动作是 :

    (1) sem减1;
    (2) 若sem减1后仍大于或等于零,则进程继续执行;
    (3) 若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

    V原语操作的动作是 :

    (1) sem加1;
    (2) 若相加结果大于零,则进程继续执行;
    (3) 若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

  • PV过程

    procedure p(var s:samephore);
    {
    s.value=s.value-1;
    if (s.value<0) asleep(s.queue);
    }
    
    procedure v(var s:samephore);
    {
    s.value=s.value+1;
    if (s.value<=0) wakeup(s.queue);
    }
    
    其中用到两个标准过程:
    asleep(s.queue);执行此操作的进程控制块进入s.queue尾部,进程变成等待状态
    wakeup(s.queue);将s.queue头进程唤醒插入就绪队列
    对于这个过程,s.value初值为1时,用来实现进程的互斥。
    
  • 进程互斥

    把临界区置于P(sem) 和V(sem)之间。当一个进程想要进入临界区时,它必须先执行P原语操作以将信号量sem减1,在进程完成对临界区的操作后,它必须执行V原语操作以释放它所占用的临界区。从而就实现了进程的互斥:

  • 进程同步

    异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程。合作进程间互相发送的信号称为消息或事件。如果我们对一个消息或事件赋以唯一的消息名,则我们可用过程 wait (消息名) 表示进程等待合作进程发来的消息,而用过程 signal (消息名) 表示向合作进程发送消息。

  • 信号量

    信号量机制是一种有效的进程同步和互斥工具。信号量有整形信号量、记录型信号量、二进制信号量等。常用整型信号量实现PV操作。P操作表示申请一个资源,V操作表示释放一个资源

信号量以及PV操作的进一步理解
信号量机制与PV操作的理解

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值