1. 有四个线程,每个线程只打印一个数字,这四个数字分别是 1 2 3 4 ,现在要求你做到四个线程顺序打印 1 2 3 4 ,且每个线程都打印10次.
时间: 2023-11-27 16:51:15 浏览: 38
这个问题可以用多线程编程中的锁和条件变量来解决,具体实现如下:
```python
import threading
class PrintThread(threading.Thread):
def __init__(self, num, lock, condition, next_condition):
super(PrintThread, self).__init__()
self.num = num
self.lock = lock
self.condition = condition
self.next_condition = next_condition
def run(self):
for i in range(10):
with self.lock:
# 等待上一个线程打印完毕
self.condition.wait()
print(self.num)
# 发出信号通知下一个线程可以开始打印
self.next_condition.notify()
# 最后一个线程打印完毕后,发出信号通知第一个线程可以开始打印了
if self.num == 4:
self.next_condition.notify()
if __name__ == '__main__':
lock = threading.Lock()
condition1 = threading.Condition(lock)
condition2 = threading.Condition(lock)
condition3 = threading.Condition(lock)
condition4 = threading.Condition(lock)
thread1 = PrintThread(1, lock, condition1, condition2)
thread2 = PrintThread(2, lock, condition2, condition3)
thread3 = PrintThread(3, lock, condition3, condition4)
thread4 = PrintThread(4, lock, condition4, condition1)
thread1.start()
thread2.start()
thread3.start()
thread4.start()
```
这个程序中,我们定义了一个 `PrintThread` 类,它继承自 `threading.Thread` 类。在 `PrintThread` 类中,我们定义了四个变量:`num` 表示线程的编号,`lock` 表示线程之间的互斥锁,`condition` 表示本线程的条件变量,`next_condition` 表示下一个线程的条件变量。
在线程运行时,每个线程会先等待上一个线程打印完毕,然后再打印自己的数字,并发出信号通知下一个线程可以开始打印。最后一个线程打印完毕后,会发出信号通知第一个线程可以开始打印了。
运行这个程序,你会看到四个线程顺序打印出了 1 2 3 4。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)