58 lines
1.4 KiB
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;
|
|
} |