Linux 编写一个2线程程序: 主线程每秒输出依次偶数0,2,4,8等偶数,另外一个线程每秒一次输出1、2、3、5等奇数,并且通过同步方法实现总的输出结果为 0、1、2、3、4按大小顺序一次输出。(提示:可以使用互斥锁实现同步)
时间: 2024-03-12 10:43:54 浏览: 45
以下是基于C语言的实现:
```c
#include <stdio.h>
#include <pthread.h>
// 定义一个全局变量用于同步输出结果
int output_list[10] = {0};
// 定义一个互斥锁对象
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 定义偶数输出线程函数
void *even_thread(void *arg)
{
int even_num = 0;
while (even_num <= 10) {
if (even_num % 2 == 0) {
// 加锁
pthread_mutex_lock(&mutex);
output_list[even_num / 2] = even_num;
// 释放锁
pthread_mutex_unlock(&mutex);
even_num += 2;
}
}
pthread_exit(NULL);
}
// 定义奇数输出线程函数
void *odd_thread(void *arg)
{
int odd_num = 1;
while (odd_num <= 11) {
if (odd_num % 2 == 1) {
// 加锁
pthread_mutex_lock(&mutex);
output_list[(odd_num - 1) / 2 + 5] = odd_num;
// 释放锁
pthread_mutex_unlock(&mutex);
odd_num += 2;
}
}
pthread_exit(NULL);
}
int main()
{
pthread_t even_t, odd_t;
// 创建并启动偶数输出线程
pthread_create(&even_t, NULL, even_thread, NULL);
// 创建并启动奇数输出线程
pthread_create(&odd_t, NULL, odd_thread, NULL);
// 等待线程结束
pthread_join(even_t, NULL);
pthread_join(odd_t, NULL);
// 输出结果,注意要按大小顺序输出
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", output_list[i]);
}
return 0;
}
```
这个程序中,通过定义一个全局变量 `output_list` 和一个互斥锁 `mutex` 来实现两个线程之间的同步。在偶数输出线程和奇数输出线程中,只有当互斥锁处于空闲状态时才能加锁并将输出结果添加到 `output_list` 中,然后再释放锁。最终,主线程对 `output_list` 进行排序后按顺序输出结果。需要注意的是,在C语言中,线程函数的返回值需要使用 `pthread_exit()` 函数来指定。