{site_name}

{site_name}

🌜 搜索

Python Semaphore是一个同步原语,用于控制同时访问共享资源的线程数量

Python 𝄐 0
python semaphore lock,python semaphore 不可变
Python Semaphore是一个同步原语,用于控制同时访问共享资源的线程数量。Semaphore维护一个内部计数器,该计数器表示还可以获取的许可证数量。

当线程需要访问共享资源时,它首先尝试获取一个许可证,如果许可证数量> 0,则线程成功获取许可证并将许可证数量减1。否则,线程将被阻塞直到有一个许可证释放为止。

在Python中,Semaphore可以使用标准库中的threading.Semaphore类来实现。下面是一个简单的例子:

python
import threading

# 创建Semaphore对象,初始值为2
semaphore = threading.Semaphore(2)

def worker():
with semaphore:
print(f'{threading.current_thread().name}获得了许可证')
# 停留一段时间模拟工作
threading.sleep(1)
print(f'{threading.current_thread().name}释放了许可证')

# 创建5个线程
for i in range(5):
t = threading.Thread(target=worker)
t.start()


在这个例子中,我们创建了一个Semaphore对象,其初始值为2。然后,我们创建了5个线程,并在每个线程中调用with semaphore:代码块来获取许可证。由于Semaphore的初始值为2,只有前两个线程能够成功获取许可证并进入临界区执行工作,而其余三个线程将被阻塞直到有许可证释放为止。

输出大致如下:


Thread-1获得了许可证
Thread-2获得了许可证
Thread-1释放了许可证
Thread-3获得了许可证
Thread-2释放了许可证
Thread-4获得了许可证
Thread-3释放了许可证
Thread-5获得了许可证
Thread-4释放了许可证
Thread-5释放了许可证