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释放了许可证
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释放了许可证
本文地址:
/show-276025.html
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。