我正在为一个班级工作,我的任务是编写一个程序,创建4个并发运行的子进程。每个子进程必须生成一个包含70个元素的数组,并以10行为单位显示它们。由于某种原因,它不起作用。数组中的所有元素都是相同的数字(每个孩子+100),即。 a1 [0] = 102,a2 [0] = 202,a3 [0] = 302,a4 [0] = 402.有人可以向我解释为什么会这样吗?谢谢。
// include files
#include <stdio.h>
#include <stdlib.h>
// constants
#define LENGTH 70
// function prototypes
int generateArray(int[], int, int);
int quicksort(int[], int, int);
int printArray(int[]);
int generateArray(int array[LENGTH], int min, int max){
int i;
for (i = 0; i < LENGTH; i++){
array[i] = (rand()%(max - min + 1))+ min;
}
return 0;
}
int quicksort (int x[LENGTH],int first, int last){
int pivot, j, temp, i;
if(first<last){
pivot=first;
i=first;
j=last;
while(i<j){
while(x[i]<=x[pivot]&&i<last)
i++;
while(x[j]>x[pivot])
j--;
if(i<j){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
temp=x[pivot];
x[pivot]=x[j];
x[j]=temp;
quicksort(x,first,j-1);
quicksort(x,j+1,last);
}
}
int printArray (int array[LENGTH]){
int i, sum = 0;
for (i = 0; i < LENGTH; i++){
printf("%d ",array[i]);
sum += array[i];
if ((i+1)%10 == 0){
printf("\n");
}
}
return sum;
}
int main (){
pid_t child1, child2, child3, child4;
int sum1=0, sum2=0, sum3=0, sum4=0, sum=0;
int a1[LENGTH], a2[LENGTH], a3[LENGTH], a4[LENGTH];
if(!(child1 = fork())){
//child 1
generateArray(a1,100,199);
quicksort(a1,0,LENGTH-1);
sum1 = printArray(a1);
printf("Child 1 Sum: %d.\n",sum1);
} else if (!(child2 = fork())){
///child 2
generateArray(a2,200,299);
quicksort(a2,0,LENGTH-1);
sum2 = printArray(a2);
printf("Child 2 Sum: %d.\n",sum2);
} else if (!(child3 = fork())){
//child 3
generateArray (a3,300,399);
quicksort(a3,0,LENGTH-1);
sum3 = printArray(a3);
printf("Child 3 Sum %d.\n",sum3);
} else if (!(child4 = fork())){
//child 4
generateArray(a4,400,499);
quicksort(a4,0,LENGTH-1);
sum4 = printArray(a4);
printf("Child 4: Sum %d.\n",sum4);
} else {
//parent
}
return 0;
}
在一个不相关的注释中,问题是父母是否可以显示所有数组中所有元素的总和。我不认为这是可能的,因为进程不共享内存,不能在不使用管道的情况下相互通信,我的教授明确表示我们不允许使用。是吗?
答案 0 :(得分:2)
rand()
只是一个伪随机数生成器。如果你没有种子&#34;它的状态,所有过程必然产生相同的序列。查看srand()
的手册页。在调用main
之后,您应该在fork
函数中调用它,以将其设置为更随机的初始状态。请务必选择与您的所有流程不同的种子。