使用fork进程,我想实现合并排序。我想分割和征服数组中的数据排序:我想将每一半分成一个子进程,然后通过让父进程合并这些部分来征服。
以下代码仅适用于两个数字,对于三个或更多数字,数组不会更改。为什么呢?
void sort(int low, int high, int a[100], int b[100]) {
int mid;
pid_t pid1, pid2;
if(low < high) {
mid = (low + high) / 2;
pid1=fork();
if (pid1<0) exit(0);
if (pid1==0) { //first child process
sort(low, mid,a,b); //first half
exit(0);
}
else wait(NULL);
pid2=fork();
if (pid2<0) exit(0);
if (pid2==0){ //second child process
sort(mid+1, high,a,b); //second half
exit(0);
}
else wait(NULL);
if (pid1>0 && pid2>0)
{
merging(low, mid, high,a, b);
}
}
}
答案 0 :(得分:1)
正如已经指出的那样,分叉进程既不能看到也不会改变彼此的内存空间。
你有(至少)三个选择: