【发布时间】:2013-12-04 12:03:37
【问题描述】:
早上好,我想问两件事.. 1)什么返回 fork() 对已经有 pid==0 的孩子做了什么?如果我继续分叉每个儿子,他们每个人的 pid 都将是 0 ??或不 ? 2) 这是我的文件 Buffer.c,它在单个进程上运行。 一开始它 forks() 出一些生产者(生产者)和一些消费者消费(),但恐怕每个生产者都进入下一个 cicle 并开始生产自己的其他消费者!因为它写 pid=-1 所以... 我希望这段代码只产生 P 生产者和 C 消费者,但我需要知道为什么每个生产者不创建其他消费者! 你能帮我吗,也许给我一个计划,我将用这段代码创建多少个进程? 也许做一个这样的计划:
父亲: 8 家生产商 - - - ... 他们每个人生产:5个消费者 等等等等……
int main(int argc, char **argv) {
/....
pid_t pid;
pid_t cons_pid[C];
/* fork producers */
pid = -1;
for(i=0; i<P && pid!=0; i++)
pid=fork();
switch(pid) {
case -1:
...
case 0:
/* GENERIC PRODUCER i */
...
/* PRODUCE() */
printf("Producer %d exits\n",i);
...
return 0;
}
/* fork consumers */
pid = -1;
for (j=0; j<C && pid!=0; j++)
pid = cons_pid[j] = fork();
switch(pid) {
case -1:
....error
case 0:
/* GENERIC CONSUMER j */
CONSUME()....
}
return 0;
}
【问题讨论】:
-
你读过fork、exec、PID、PPID等吗?作业?
-
有人可以创建一个家庭作业标签吗!!!
-
不允许使用作业标签 ;-)
-
我读到过,但恐怕每个生产者也会 fork() 一些消费者,对吧?你同意还是不同意?