Semaphore 对象有两个主要的方法:acquire() 和 release()。acquire() 用于获取一个资源,如果没有可用资源,则会阻塞线程直到有资源可用。release() 用于释放一个资源。在本例中,Semaphore 的目的是用来同步多个线程之间的操作,以确保它们按照预期的顺序执行。写一段代码
时间: 2024-03-13 22:47:44 浏览: 13
来演示如何使用 Semaphore 对象进行同步:
```python
import threading
import time
# 创建 Semaphore 对象,初始值为 0,表示没有可用资源
semaphore = threading.Semaphore(0)
def worker():
# 等待资源可用
semaphore.acquire()
print("Thread %s is working" % threading.current_thread().name)
time.sleep(1)
print("Thread %s is done" % threading.current_thread().name)
# 释放资源
semaphore.release()
# 创建多个线程
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
# 启动线程
for t in threads:
t.start()
# 释放 5 个资源,让线程开始执行
for i in range(5):
semaphore.release()
# 等待所有线程执行完毕
for t in threads:
t.join()
```
在这个例子中,我们创建了 5 个线程来执行 `worker` 函数。由于 Semaphore 初始值为 0,所以所有线程都会在 `acquire` 方法处阻塞,直到有资源可用。我们通过循环调用 `release` 方法来释放 5 个资源,让这些线程开始执行。每个线程会输出一些信息,然后再次调用 `release` 方法来释放资源。最后,我们等待所有线程执行完毕,程序结束。