2. 用C语言编写创建2个线程的程序。父进程显示5次“This is the parent , pid is xxxxxx”, 每个线程显示5次“This is a new thread ,thread ID is xxxxxx”。要求交叉显示父进程和子进程的显示内容。
时间: 2024-11-03 14:18:50 浏览: 39
在C语言中,可以使用`pthread.h`库来创建和管理线程。以下是一个简单的示例程序,它演示了如何创建两个线程,其中父进程每隔一次循环打印"This is the parent, pid is",而每个子线程也各自独立地打印"This is a new thread, thread ID is"。
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_THREADS 2
#define THREAD_COUNT 5
// 子线程函数
void* child_thread(void* arg) {
int id = (int)arg;
for (int i = 0; i < THREAD_COUNT; i++) {
printf("This is a new thread, thread ID is %d\n", id);
pthread_yield(); // 为了让主线程有机会打印
}
return NULL;
}
// 父线程函数
void* parent_thread(void* unused) {
for (int i = 0; i < THREAD_COUNT * MAX_THREADS; i++) {
printf("This is the parent, pid is %d\n", getpid());
if (i % MAX_THREADS == 0) { // 每显示MAX_THREADS次,切换到子线程
pthread_t children[MAX_THREADS];
for (int j = 0; j < MAX_THREADS; j++) {
pthread_create(&children[j], NULL, child_thread, (void*)j);
}
for (int k = 0; k < MAX_THREADS; k++) {
pthread_join(children[k], NULL); // 等待所有子线程结束
}
}
}
return NULL;
}
int main() {
pthread_t parent_thread_id;
pthread_create(&parent_thread_id, NULL, parent_thread, NULL);
// 等待父线程结束后结束整个程序
pthread_join(parent_thread_id, NULL);
return 0;
}
```
在这个例子中,我们首先创建父线程,然后在父线程循环中每显示一定次数就启动子线程组,并等待它们完成。这样就可以保证父进程和子线程交替显示信息。
阅读全文