【发布时间】:2016-01-02 20:16:31
【问题描述】:
问题:
- 我的进程是否并行运行? 我想要六个进程并行运行。
- 如何在无限循环中使用信号量同步这些进程(父进程和五个子进程)?所以输出将是: 1 2 3 4 5 reset 1 2 3 4 5 reset 等...
- 任何简单易懂的信号量文档?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
parentWithFiveChildren()
{
printf("1 "); //Parent
fflush(stdout);
int i, status;
for (i = 2; i < 7; i++)
{
sleep(1);
if (fork() == 0) //Child Processes
{
if (i == 6)
{
printf("reset ");
fflush(stdout);
exit(0);
}
printf("%d ", i);
fflush(stdout);
sleep(7);
exit(i); //Exiting child processes
}
}
while ((wait(&status)) > 0)
printf("\a");
return 0;
}
int main(void)
{
parentWithFiveChildren();
}
输出:
1 2 3 4 5 reset
【问题讨论】:
-
这些问题的答案在 C 领域和 POSIX 领域之外(如果您点击了“fork”标签来阅读标签 wiki,您就会知道),等等事物。你有六个处理器内核吗?如果没有,是否甚至可以同时运行六个进程,而不是在它们之间进行任务切换?我希望这个评论已经为你提供了足够的思考,让你去做一些研究并自己想出答案。如果这对您来说太容易了,那么请考虑“过早的优化是万恶之源”并问自己,为什么
fork()? -
@Seb - 这些问题的答案不在 C 领域和 POSIX 领域中。 1) 可能,但考虑到上下文问题和提问者的经验水平,2) 和 3) 都在 C 的范围内。
-
@ryyker 关于 2,C 没有定义术语“进程”;这也是一种 POSIX 主义。
-
这里真的有什么东西表明反对票或接近票吗?该问题格式正确,格式正确,具有一定程度的特异性,并且将来可能对其他人有用。是不是应该考虑海报对网站和工艺的体验?
标签: c unix parallel-processing fork posix