Semaphore 锁类解释

发布时间 2023-03-30 15:15:47作者: MrSphere
# -*- 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()