PV操作

哪里用pv操作

  说起pv操作就要提到信号量,提到信号量就必须提到并发编程,并发是一种在时间上将多个逻辑控制流进行重叠的机制,也是现代计算机系统最显著和重要的特性。
  在基于多线程的并发编程中绕不开对共享变量的使用。一个变量是共享的,当且仅当这个变量的实例被一个以上的线程引用。
  一组并发线程运行在一个进程的上下文中,每一个线程都有自己的独立线程上下文,包括线程 ID、栈、栈指针、程序计数器 PC以及通用目的寄存器。每一个线程和其他线程一起共享进程上下文的剩余部分,包括用户虚拟地址空间和进程打开的文件集合。寄存器从不共享,但虚拟存储器总是共享。
  共享变量对于多线程协作是非常方便的,但也因此带来了一些棘手的问题,主要有两方面:
  ·互斥操作
  ·同步操作

什么是pv操作

  谈到PV操作绕不开一位著名的计算机大神—— Edsgar Wybe Dijkstra,中文名”埃德斯加·狄克斯特拉”,荷兰人,毕业于莱顿大学、剑桥大学。 中国读者常常不明白这一同步机制为什么叫PV操作,原来这是狄克斯特拉用荷兰文定义的, 因为在荷兰文中,通过叫passeren,释放叫vrijgeven,PV操作因此得名。

   1. p操作
  ·如果 S 非零,将 S 减 1
  ·如果 S 小于等于 零,挂起当前线程

   2. v操作
  ·将 S 加 1
  ·如果 S 小于等于 0,随机重启一个被 P 操作挂起的线程

  举个栗子:
  就像好比火车、飞机上的厕所,一次只能一个人,你要用时,首先看看显示牌是否空闲(绿色,相当于信号量)——“就绪”(ready),如果是绿色,你就可以去使用了,进取后将锁锁上(P操作),指示牌编程红色——“运行”(running);出来后将锁打开(V操作),编程绿——“阻塞”(blocking)

怎么用pv操作

  PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。

小结

  使用PV操作实现进程同步时应该注意的问题有:
  ·同一信号量的P、V操作要成对出现。
  ·信号量的初始值与相应资源的数量有关,也与P、V操作在程序中出现的位置有关。
  ·我们要首先分析出进程间的制约关系,在保证进程间有正确同步关系的情况下,确定哪一个进程先执行,哪一个进程后执行,彼此间应该用什么信号量来协调。

你可能感兴趣的:(——PV)