用C语言编写创建2个线程的程序。父进程显示5次“This is the parent , pid is xxxxxx”, 每个线程显示5次“This is a new thread ,thread ID is xxxxxx”。要求交叉显示父进程和子进程的显示内容
时间: 2024-11-05 08:34:25 浏览: 14
c语言多进程多线程编程
在C语言中,可以使用`pthread.h`库来创建线程。下面是一个简单的示例,展示了如何创建两个线程并按照所描述的方式交替显示信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_THREADS 2
#define THREAD_MSG "This is a new thread, thread ID is %d"
#define PARENT_MSG "This is the parent, pid is %d"
void *child_thread(void *arg) {
int thread_id = (int)arg;
for (int i = 0; i < 5; i++) {
printf(THREAD_MSG, thread_id);
pthread_yield(); // 让出处理器时间给其他线程
}
return NULL;
}
void print_parent_msg(int id) {
for (int i = 0; i < 5; i++) {
printf(PARENT_MSG, getpid());
sleep(1); // 父进程稍作暂停
}
}
int main() {
pthread_t threads[MAX_THREADS];
int thread_ids[] = {1, 2}; // 两个子线程ID
// 创建线程
for (int i = 0; i < MAX_THREADS; i++) {
if (pthread_create(&threads[i], NULL, child_thread, (void*)thread_ids[i]) != 0) {
perror("Error creating thread");
exit(EXIT_FAILURE);
}
}
// 打印父进程信息
print_parent_msg(0);
// 等待所有子线程完成
for (int i = 0; i < MAX_THREADS; i++) {
if (pthread_join(threads[i], NULL) != 0) {
perror("Error joining thread");
exit(EXIT_FAILURE);
}
}
printf("\nAll threads finished.\n");
return 0;
}
```
在这个程序中,我们首先定义了两个函数,`child_thread`用于子线程执行,`print_parent_msg`用于打印父进程的信息。然后,在`main`函数中,创建了两个子线程,并将它们的ID作为参数传递。每个子线程会循环打印五次指定的消息,同时父进程也间隔一定时间打印消息。
阅读全文