qfedu-linux-advanced-level/day7/homework/h1.c

58 lines
1.4 KiB
C

// 编写一个程序, 创建两个线程, 一个线程负责打印奇数, 另一个线程负责打印偶数, 要求打印的结果为1、2、3、4、5、6..., 直到指定的最大值。
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *printOdd(void *data) // 打印奇数
{
int *n = (int *)data;
for (int i = 1; i <= *n; i++)
{
usleep(100 * 1000); // 睡眠 0.1 秒
if (i % 2 == 1)
{
printf("%d", i);
if (i != *n) // 不是最后一个字符,则追加'、'
printf("");
else if (i == *n) // 到最后一个字符,则追加'\n'换行
printf("\n");
fflush(stdout);
}
}
return NULL;
}
void *printEven(void *data) // 打印偶数
{
int *n = (int *)data;
for (int i = 1; i <= *n; i++)
{
usleep(100 * 1000); // 睡眠 0.1 秒
if (i % 2 == 0)
{
printf("%d", i);
if (i != *n)
printf("");
else if (i == *n)
printf("\n");
fflush(stdout);
}
}
return NULL;
}
int main(int argc, char const **argv)
{
int *n;
printf("请输入最大值: ");
fflush(stdout);
scanf("%d", n);
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, printOdd, (void *)n);
pthread_create(&tid2, NULL, printEven, (void *)n);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}