5.1.18 信号量

互斥锁和排斥锁  同一时间只能有一个线程处理同一段代码。比如,只有一个坑的卫生间

信号量:同时最多可以有N个线程同时处理同一段代码。 比如有3个坑的卫生间,最多可以有三个人同时使用。

from threading import Semaphore
from threading import Thread
import time


def task(name):
    sm.acquire()
    print('%s 正在占坑。。。' % name)
    time.sleep(2)
    sm.release()


if __name__ == '__main__':
    sm = Semaphore(3)  # 有三个坑的锁 , 排斥锁和递归锁只有一个坑的锁
    # t_1 = []
    for i in range(10):
        t = Thread(target=task, args=('线程'+str(i),))
        # t_1.append(t1)
        t.start()

运行结果:

线程0 正在占坑。。。
线程1 正在占坑。。。
线程2 正在占坑。。。


线程3 正在占坑。。。
线程5 正在占坑。。。
线程4 正在占坑。。。


线程7 正在占坑。。。
线程8 正在占坑。。。
线程6 正在占坑。。。

线程9 正在占坑。。。

Process finished with exit code 0
View Code

猜你喜欢

转载自www.cnblogs.com/beallaliu/p/9191751.html