在我的多进程程序中,子进程同时更改数组的上下文并且父进程读取。为了让父进程读取由子进程更新的数组,我被告知使用pipe
并且它有效!问题是我不能使用ARRAY_SIZE
超过65600ish,我需要它是5000000.
fcntl
可以改变它。
在main
,我这样做了:
if(pipe(fd) == -1)
perror("pipe");
fcntl(fd[1],F_SETPIPE_SZ,5000000);
它说F_SETPIPE_SZ
未声明。
如果我将它移到main
之外,它会说:
error: expected declaration specifiers or ‘...’ before numeric constant
而不是处理这些,有没有其他方法让父母读取更新的数组? (这是一项任务,所以我认为他们不会过于刻苦地说实话,所以我相信必须有一种更简单的方法)
编辑我想知道如何通过不改变管道尺寸来实现这一目标。这是我的代码。这段代码确实打印了我想要的内容,但在此作业中需要Total time = 1459086139.792471 seconds.
,主要思想是查看单个流程程序和多流程程序的执行时间之间的差异。单个过程程序需要37秒。所以,这个结果不对,对吗?我试图将//another attempt
之后的部分移动到循环的外部,它不起作用,它也没有给出任何错误,什么都不做。
for(j = 0; j<NUM_OF_SUBARRAYS; j++)
{
start = (SUBARRAY_SIZE*j);
child_pid = fork();
switch (child_pid)
{
case -1:
perror("fork");
exit(1);
case 0:
child_process_routine(start);
exit(0);
default:
waitpid(-1, NULL, 0);
//another attempt
close(fd[1]);
for (i = 0; i<ARRAY_SIZE; i++)
{
read(fd[0], &temp, sizeof(temp));
printf("%c ",temp);
}
close(fd[0]);
}
}