39_并发编程-信号量

一、定义
 
  1、互斥锁同时只允许一个线程更改数据,而信号量Semaphore是同时允许一定数量的线程更改数据 。
  假设商场里有4个迷你唱吧,所以同时可以进去4个人,如果来了第五个人就要在外面等待,等到有人出来才能再进去玩。
 
  2、实现:
  信号量同步基于内部计数器,每调用一次acquire(),计数器减1;每调用一次release(),计数器加1.当计数器为0时,acquire()调用被阻塞。这是迪科斯彻(Dijkstra)信号量概念P()和V()的Python实现。信号量同步机制适用于访问像服务器这样的有限资源。信号量与进程池的概念很像,但是要区分开,信号量涉及到加锁的概念
 1 import time
 2 import random
 3 from multiprocessing import Process,Semaphore
 4 
 5 def dbj(i,s):
 6     s.acquire()
 7     print('%s号男主人公来洗脚'%i)
 8     print('-------------')
 9     time.sleep(random.randrange(3,6))
10     # print(time.time())
11     s.release()
12 
13 if __name__ == '__main__':
14     s = Semaphore(4) #创建一个计数器,每次acquire就减1,直到减到0,那么上面的任务只有4个在同时异步的执行,后面的进程需要等待.
15     for i in range(10):
16         p1 = Process(target=dbj,args=(i,s,))
17         p1.start()

 

原文地址:https://www.cnblogs.com/hq82/p/9851573.html