2.用C语言编写创建2个线程的程序。父进程显示5次“Thisisthe parent,pidisxxxxxx”,每个线程显示5次“Thisisanewthread, threadIDisxxxxxx”。要求交叉显示父进程和子进程的显示内容。
时间: 2024-11-19 21:36:10 浏览: 2
在C语言中,你可以使用POSIX线程库(pthread)来创建并管理线程。下面是一个简单的示例程序,展示了如何创建两个线程,一个作为父进程,另一个作为子进程,交替显示信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THREAD_ID 1000
void *parent_thread(void *arg) {
int count = 0;
while (count < 5) {
printf("This is the parent, pid is %d\n", getpid());
if ((count + 1) % 2 == 0)
pthread_yield(); // 交错让步给子线程
sleep(1); // 暂停一秒
count++;
}
return NULL;
}
void *child_thread(void *arg) {
int count = 0;
while (count < 5) {
printf("This is a new thread, thread ID is %d\n", THREAD_ID);
if ((count + 1) % 2 != 0)
pthread_yield(); // 交错让步给父线程
sleep(1); // 暂停一秒
count++;
}
return NULL;
}
int main() {
pthread_t child_thread_id;
// 创建子线程
if (pthread_create(&child_thread_id, NULL, child_thread, NULL)) {
perror("Error creating child thread");
exit(EXIT_FAILURE);
}
// 创建并运行父线程
pthread_t parent_thread_id;
if (pthread_create(&parent_thread_id, NULL, parent_thread, NULL)) {
perror("Error creating parent thread");
exit(EXIT_FAILURE);
}
// 等待子线程完成
pthread_join(child_thread_id, NULL);
// 等待父线程完成
pthread_join(parent_thread_id, NULL);
printf("Both threads completed.\n");
return 0;
}
```
这个程序首先创建子线程,然后创建父线程。每个线程都有一个循环,每轮循环都会交替打印一条消息,并暂停一秒钟。`pthread_yield()`函数用于让当前正在运行的线程让出处理器时间,实现交替显示。
阅读全文