互斥锁使用后,一个资源同时只有一个线程访问。如果某个资源,我们同时想让N个(指定数值)线程访问?这时候,可以使用信号量。
信号量控制同时访问资源的数量。信号量和锁相似,锁同一时间只允许一个对象(进程)通过,信号量同一时间允许多个对象(进程)通过。
信号量底层就是一个内置的计数器。每当资源获取时(调用acquire)计数器-1,资源释放时(调用release)计数器+1。
- #coding=utf-8
- from threading import Thread, Lock
- from time import sleep
- from multiprocessing import Semaphore
-
- """
- 一个房间一次只允许两个人通过
- 若不使用信号量,会造成所有人都进入这个房子
- 若只允许一人通过可以用锁-Lock()
- """
- def home(name, se):
- se.acquire(