下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

PV操作和信号量的全面解析

作者:课课家教育     来源: http://www.kokojia.com点击数:1662发布时间: 2017-04-08 11:01:23

标签: 操作系统编程数据结构

  信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。对于信号量,可以认为是一个仓库,有两个概念,容量和当前的货物个数。

PV操作和信号量的全面解析_信号量_编程_开发_课课家教育

  P操作从仓库拿货,如果仓库中没有货,线程一直等待,直到V操作,往仓库里添加了货物,为了避免P操作一直等待下去,会有一个超时时间。

  V操作往仓库送货,如果仓库满了,线程等待,直到有P操作,从仓库中拿走货物,有空的位置。

  创建信号量,设置容量,先有V操作,才能P操作。

  P操作:货物个数减1,减过之后,货物个数大于等于0,说明已经拿到货物,线程继续。否者线程阻塞。

  V操作:货物个数加1,加过之后,货物个数小于等于容量,说明添加成功,线程继续。否者线程阻塞。

  信号量:0≤ 信号量≤容量 ,取值 表示当前可以使用的货物;

  信号量<0 , 取值 表示当前等待使用货物的线程;

  信号量>容量 , 信号量-容量 表示当前等待添加货物的线程。

  通常,信号量的容量设置很大,可以一直V操作,不会阻塞,但是P操作的时候,很可能阻塞。

  当容量为1,也就是互斥,执行流程必定是V操作,P操作,V操作,P操作...

  信号量如何做到线程同步?

可以认为信号量关联一组线程,保存一个指针,指向线程数组的首地址。

  可以认为信号量关联一组线程,保存一个指针,指向线程数组的首地址。比如当前信号量为-1,进行P操作,信号量为-2,说明没有拿到货物,线程等待,取值为-2,说明有两个线程等待那货物。这个时候,其他线程进行V操作,信号量加1,为-1,信号量通知等待的线程中,第一个线程继续执行,第二个线程继续等待。

  也就是说,P操作等待的情况是减1后,信号量小于0。 P操作继续执行的情况有两种:a、减1后,信号量大于等于0,不需等待,直接执行;b、信号量小于0,等待中,其他人进行了V操作,通知这个线程,继续执行。

     分享:1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾恩德霍芬技术大学(Eindhoven Technical University)任数学教授。在这里,他参加了X86计算机开发,设计与实现了具有多道程序运行能力的操作系统——THE Multiprogramming System。

他参加了X86计算机的开发,设计与实现了具有多道程序运行能力的操作系统——THE Multiprogramming System。

  项目中的使用场景:

  客户端使用提供的SDk与服务交互,为了提高效率,客户端发送一个请求后,SDK异步回调给客户端。但是,有些请求,客户端希望同步,等待回复。这个时候,建立一个map,以req的sequence为key,value为信号量的指针,信号量的容量设置为1,可用的货物为0,对信号量进行TimeoutP操作,货物个数为-1,阻塞在这里。异步回调,收到回复的sequence,根据map找到信号量指针,进行V操作,货物个数为0,通知前面TimeoutP的线程继续执行下去,这个时候,TimeoutP的线程,把回复消息取出来,返回给客户端。

     小结:信号量的类型定义信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。一般来说,信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。如果大家还想了解更多相关内容,请登录课课家咨询~

赞(25)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程