1. 程式人生 > >5.1.18 信號量

5.1.18 信號量

HR 。。 time 代碼 tar 有一個 col pan class

互斥鎖和排斥鎖 同一時間只能有一個線程處理同一段代碼。比如,只有一個坑的衛生間

信號量:同時最多可以有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

5.1.18 信號量