pv操作与信号量

Posted chenjie2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pv操作与信号量相关的知识,希望对你有一定的参考价值。

  在python同步编程部分,需要分析和思考多个线程之间同步互斥问题,因此pv操作和信号量作为基础和重中之重,特此回顾pv操作和信号量。

  PV操作由P操作原语和V操作原语组成(原语即不可在分割的操作),对信号量(大部分是cpu等资源)进行操作,具体定义如下:

    P(S):

      ①将信号量S的值减1,即S=S-1;

      ②如果S>=0,则该进程继续执行;否则该进程置为等待状态。

    V(S):

      ①将信号量S的值加1,即S=S+1;

      ②该进程继续执行;如果该信号的等待队列中有等待进程就唤醒一等待进程。

p操作就是对s(信号量)进行操作,p操作占用一个资源(s=s-1),空闲信号量减一,此时s>=0说明刚才资源足以满足线程需求,线程运行,否则挂起。

v操作是线程完成之后释放资源,此时(s=s+1),此时空闲资源数量+1,若此时资源满足挂起队列线程需要,则新线程运行。

  

  关于PV操作的总结:

    1.在多线程编程中使用PV操作能忽略代码具体的实现细节,这样确保总体思路的正确性。

    2.分析PV操作时紧紧抓住同步和互斥;

       同步主要分析:谁在等待?等待什么?分析清楚了,同步就出来了;

       互斥主要分析:那些资源是共享的,共享资源需进一步思考有没有必要互斥,比如果盘问题中果盘是共享资源,但是果盘操作并不需要互斥;

以上是关于pv操作与信号量的主要内容,如果未能解决你的问题,请参考以下文章

信号量与PV操作

信号量和PV操作

PV操作

进程相互作用之信号量PV操作及其代码实现

进程的互斥与同步及信号量的PV操作

简单计算机操作系统PV操作求步骤