利用线程信号量使三个线程交替循环输出10次
时间: 2023-11-28 16:52:43 浏览: 39
以下是一个使用线程信号量实现三个线程交替循环输出10次的示例代码:
```python
import threading
# 定义三个信号量,初始值分别为1, 0, 0
sem1 = threading.Semaphore(1)
sem2 = threading.Semaphore(0)
sem3 = threading.Semaphore(0)
# 定义三个线程
def thread1():
for i in range(10):
sem1.acquire() # 获取信号量1
print("Thread 1: ", i)
sem2.release() # 释放信号量2
def thread2():
for i in range(10):
sem2.acquire() # 获取信号量2
print("Thread 2: ", i)
sem3.release() # 释放信号量3
def thread3():
for i in range(10):
sem3.acquire() # 获取信号量3
print("Thread 3: ", i)
sem1.release() # 释放信号量1
# 启动三个线程
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t3 = threading.Thread(target=thread3)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
```
在这个示例中,我们定义了三个信号量,它们的初始值分别为1, 0, 0。这意味着线程1可以获取信号量1并开始执行,线程2和线程3必须等待信号量2和信号量3的释放才能开始执行。
在每个线程的循环中,线程首先获取自己的信号量,打印输出,然后释放下一个线程的信号量。这样,三个线程就可以交替循环输出10次。最后,我们使用join()方法等待所有线程执行完毕。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)