gpt4 book ai didi

C - 系统调用 - N 个子进程的数组分区 -

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:57 24 4
gpt4 key购买 nike

首先感谢您提前的帮助。我必须编写一个程序,在其中我传递一个元素以从终端进行搜索,并且父进程将维度数组(由随机数组成) - 由终端定义 - 分成相等的部分,每个部分由子进程管理相同的代码。每个子进程负责在数组的一部分中查找元素,以便在子进程之间公平地分配工作。

问题是我不知道如何在没有对数组排序的情况下创建这个分区。我想我可以做一些合并/鸡尾酒或快速排序,但我认为它对于这项任务来说过于丰富且无用。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>

int partition(int x, int y);

int main(int argc, char*argv[]){
int i, j, result, state_wait, *v, n_children, dim, random_number;
int elem,div,lower,higher;
pid_t pid;
srand(time(NULL));
if(argc<4){
fprintf(stderr,"Insufficient parameters\n");
exit(EXIT_FAILURE);
}
n_children=atoi(argv[1]);
if(n_children<0){
fprintf(stderr,"Enter a positive number of children\n");
exit(EXIT_FAILURE);
dim=atoi(argv[2]);
if(dim<0||dim>n_children){
fprintf(stderr,"Enter a valid size\n");
exit(EXIT_FAILURE);
elem=atoi(argv[3]);
fprintf(stdout,"F: Father || PID = %d\n",getpid());
v=(int*)malloc(sizeof(int)*dim);
fprintf(stdout,"F: VECTOR:\n\n");
for(i=0;i<dim;i++){
v[i]=rand();
fprintf(stdout,"(%d) v[%d] number = %d\n",i,i,v[i]);
}
for(j=0;j<n_children;j++){
if(fork()==0){
fprintf("F: Child N. = %d || PID = %d\n",i,getpid());
div=partition(dim,n_children);
//lower=? j*div?
higher=lower+div-1; //except the final case when it is dim-1
result=search(lower,higher,&elem);
}
}
}

int partition(int x, int y){
int div=(x/y); //If I had a vector of 1000 elem., work on them must be fairly distributed among the children
//number of elements each group
if((x-div)>1)
div=(x/y)+1;
return div;
}
int search(int lower,int higher, int*elem){
int i;
for(i=lower;i<=higher;i++){
if(v[i]==elem){
fprintf(stdout,"Element found [position = %d]\n",i);
exit(1);
}
}
exit(-1);
}

最佳答案

我相信您可以使用文件描述符进行进程间通信。这称为管道。之后,您可以将数组拆分为可用的子进程数,可能包括父进程。将这些拆分部分存储在您创建的管道中。让子进程获取文件描述符中的元素!我认为数组是否排序并不重要,无论如何任务都会除以 N(如果 N 是 child 的数量)。搜索man 2 管道在 linux(或 MacOS)终端中获取更多信息!

关于C - 系统调用 - N 个子进程的数组分区 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com