用C语言编写一个多进程多线程的程序:要求创建4个子进程,每个子进程都分别创建两个线程,进程和线程的功能不作要求,可以只提供简单的打印语句。
时间: 2023-07-05 13:07:53 浏览: 96
以下是一个基本的实现,每个子进程创建两个线程,每个线程分别输出自己的 ID 和进程 ID:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define NUM_PROCESSES 4
#define NUM_THREADS 2
void *thread_func(void *arg) {
int *args = (int*) arg;
printf("Thread %d in process %d\n", args[0], args[1]);
return NULL;
}
int main() {
int i, j;
pid_t pid[NUM_PROCESSES];
for (i = 0; i < NUM_PROCESSES; i++) {
pid[i] = fork();
if (pid[i] == 0) {
int args[NUM_THREADS][2];
for (j = 0; j < NUM_THREADS; j++) {
args[j][0] = j;
args[j][1] = i;
pthread_t tid;
pthread_create(&tid, NULL, thread_func, &args[j]);
pthread_join(tid, NULL);
}
exit(0);
}
}
for (i = 0; i < NUM_PROCESSES; i++) {
waitpid(pid[i], NULL, 0);
}
return 0;
}
```
首先定义了 `NUM_PROCESSES` 和 `NUM_THREADS` 常量,表示要创建的子进程数和每个子进程要创建的线程数。然后在 `main` 函数中循环创建子进程,对于每个子进程,使用一个二维数组 `args` 存储每个线程要输出的 ID 和进程 ID,再用一个循环创建每个线程,调用 `pthread_create` 函数创建线程,并传入线程函数 `thread_func` 和对应的参数。为了保证所有线程都执行完毕,使用 `pthread_join` 函数等待线程结束。最后在主进程中使用 `waitpid` 函数等待所有子进程结束。
阅读全文