编写程序,1. 有四个线程,每个线程只打印一个数字,这四个数字分别是 1 2 3 4 ,现在要求你做到四个线程顺序打印 1 2 3 4 ,且每个线程都打印10次.
时间: 2023-09-15 19:17:25 浏览: 54
这里给出一个使用信号量的解法:
```python
import threading
# 定义信号量
sema1 = threading.Semaphore(1)
sema2 = threading.Semaphore(0)
sema3 = threading.Semaphore(0)
sema4 = threading.Semaphore(0)
def print_num(num, sema_cur, sema_next):
for i in range(10):
sema_cur.acquire() # 当前线程获取信号量,其他线程阻塞
print(num)
sema_next.release() # 下一个线程释放信号量,唤醒下一个线程
# 创建四个线程
t1 = threading.Thread(target=print_num, args=(1, sema1, sema2))
t2 = threading.Thread(target=print_num, args=(2, sema2, sema3))
t3 = threading.Thread(target=print_num, args=(3, sema3, sema4))
t4 = threading.Thread(target=print_num, args=(4, sema4, sema1))
# 启动四个线程
t1.start()
t2.start()
t3.start()
t4.start()
# 等待四个线程结束
t1.join()
t2.join()
t3.join()
t4.join()
```
这里使用了四个信号量`sema1`、`sema2`、`sema3`、`sema4`,分别表示线程1、2、3、4的信号量。每个线程打印完数字后,都会释放下一个线程的信号量,保证下一个线程可以执行。同时每个线程在打印数字前会获取自己的信号量,保证了四个线程的顺序性。