# -*- coding: utf-8 -*-
'''
信号量是控制同一时刻并发执行的任务数
默认的 default value 的值是1,此时等同于互斥锁
当semaphore 的值小于0的时候,此时,程序会被阻塞
每次加锁 semaphore 的值减少1,每次解锁加1
有 acquire 和 release 的程序可以使用上下文管理 with
'''
from threading import Thread, Semaphore
import time
gvar = 0
def childtask(i, s: Semaphore):
global gvar
s.acquire()
gvar = i
time.sleep(1)
print(f"{gvar} is {i}")
s.release()
if __name__ == '__main__':
s = Semaphore(1)
threads = [Thread(target=childtask, args=(i, s)) for i in range(10)]
for t in threads:
t.start()
Semaphore 锁类解释
发布时间 2023-03-30 15:15:47作者: MrSphere