96-python-进程-信号量

# 信号量:
# 跟 锁的概念一样 ,只不过可以设置钥匙的数量
import time
import random
from multiprocessing import Process
from multiprocessing import Semaphore

def fn(i,sem):
    sem.acquire()   # 拿钥匙
    print('%s拿到钥匙!!!!!!'%(i))
    time.sleep(random.randint(1,5))
    print('%s归还钥匙-----'%(i))
    sem.release()   # 还钥匙

if __name__ == '__main__':
    sem = Semaphore(4)
    for i in range(10):
        p = Process(target=fn,args=(i,sem))
        p.start()


sem = Semaphore(4)
sem.acquire()
print('第一个人')
sem.acquire()
print('第二个人')
sem.acquire()
print('第三个人')
sem.acquire()
print('第四个人')
sem.acquire()
print('第五个人')   # 第五个无法打印
                    # 因为只有四把钥匙,只能有四个进程进去 , 当前进程时第五个 所有进不去
posted @ 2018-11-14 12:50  _Q  阅读(174)  评论(0)    收藏  举报