编辑:我修改了问题以使其更清晰。
我要么:
或
这是第一个场景的代码。子进程不显示更新的数组,而是显示原始数组。
git@bitbucket.org:bla/blabla
答案 0 :(得分:0)
使用semaphore。或者,如果您想要更简单的东西(但以性能为代价),您可以拥有int* parentWait = 1;
并将其传递给子进程。当孩子完成该过程时,它可以将parentWait
的内容更新为0。
然后,在父母的过程中,你可以拥有
while(parentWait){
// do nothing.
}
虽然要注意,正如Ctx所指出的,这种方法需要指针parentWait
指向shared map。所以,我建议你使用POSIX信号量。
答案 1 :(得分:0)
如果不使用共享内存,就无法满足要求。
当您<table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" style="border-collapse: collapse; background-color: #F2F2F2; height: 100% !important; max-width:600px !important;">
时,孩子会获得父母内存的副本(包括数组)。但是,现在有两个不同的数组,两个进程都不能看到另一个进程对其副本的更改。
答案 2 :(得分:0)
在父上下文中使用sched _yield()
系统调用后,它将在父进程之前先执行子进程
答案 3 :(得分:0)
您可以在父级中使用它:waitpid(p, 0, 0);
最好检查所有三个条件而不是使用(p!= 0),因为fork()调用有三个可能的输出:
if ( p == 0 )
// Child Code
else if ( p > 0 )
// Parent Code
else
printf("fork failed");
至于首先执行父进程,通常不是一个好主意,因为它会创建一个孤立进程。孩子必须在父母之前终止。您可以在fork()调用之前的子进程之前执行要执行的代码。如果由于某些原因仍要先执行父级,则可以在子级中使用它:
waitpid(getppid(), 0, 0);
库:
#include <sys/types.h>
#include <unistd.h>
#include<sys/wait.h>