4. 编写一个2线程程序: 主线程每秒输出依次偶数0,2,4,8等偶数,另外一个线程每秒一次输出1、2、3、5等奇数,并且通过同步方法实现总的输出结果为 0、1、2、3、4按大小顺序一次输出。(提示:可以使用互斥锁实现同步)
时间: 2024-03-12 17:43:53 浏览: 81
以下是基于Python的实现:
```python
import threading
# 定义一个全局变量用于同步输出结果
output_list = []
# 定义一个互斥锁对象
mutex = threading.Lock()
# 定义偶数输出线程函数
def even_thread():
even_num = 0
while even_num <= 10:
if even_num % 2 == 0:
# 加锁
mutex.acquire()
output_list.append(even_num)
# 释放锁
mutex.release()
even_num += 2
# 定义奇数输出线程函数
def odd_thread():
odd_num = 1
while odd_num <= 11:
if odd_num % 2 == 1:
# 加锁
mutex.acquire()
output_list.append(odd_num)
# 释放锁
mutex.release()
odd_num += 2
if __name__ == '__main__':
# 创建并启动偶数输出线程
even_t = threading.Thread(target=even_thread)
even_t.start()
# 创建并启动奇数输出线程
odd_t = threading.Thread(target=odd_thread)
odd_t.start()
# 等待线程结束
even_t.join()
odd_t.join()
# 输出结果,注意要按大小顺序输出
output_list.sort()
for num in output_list:
print(num)
```
这个程序中,通过定义一个全局变量 `output_list` 和一个互斥锁 `mutex` 来实现两个线程之间的同步。在偶数输出线程和奇数输出线程中,只有当互斥锁处于空闲状态时才能加锁并将输出结果添加到 `output_list` 中,然后再释放锁。最终,主线程对 `output_list` 进行排序后按顺序输出结果。
阅读全文