#include <stdio.h>
#include <wait.h>
#include <unistd.h>
const int proNum = 3; // 生产者数目
const int conNum = 2; // 消费者数目
int main() {
int status = -1;
int num = 0; // 任意线程创建子线程的数目
// 创建生产者线程
int i;
for( i = 0; i < proNum; ++i) {
status = fork();
if (status == 0 || status == -1) {
break; // 子进程会在这里break
} else {
//sleep(2);
++num; // 父进程统计当前子进程的个数
}
}printf("%d\n",num);
// 创建消费者线程
for (i = 0; i < conNum; ++i) {
if (status == 0) { // 生产者线程num一直小于proNum
break;
} else {
status = fork(); // 这里是父进程的fork()函数
//sleep(2);
++num;
}
}
printf("%d\n",num);
if (status == -1) {
perror("fork() error\n");
return 1;
} else if (status == 0 && num < proNum) { // 生产者线程
puts("child pro");
printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());
} else if (status == 0 && num >= proNum) { // 消费者线程
puts("child con");
printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());
} else { // 父进程
wait(NULL);
puts("parent");
}
return 0;
}
网上看的,获益匪浅,
从运行开始就有父线程了,所谓的父线程也是别人的子线程,这个很好用,感觉