在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操作时紧紧抓住同步和互斥;
同步主要分析:谁在等待?等待什么?分析清楚了,同步就出来了;
互斥主要分析:那些资源是共享的,共享资源需进一步思考有没有必要互斥,比如果盘问题中果盘是共享资源,但是果盘操作并不需要互斥;