gpt4 book ai didi

perl - 在 Perl 中访问具有子进程的数组

转载 作者:行者123 更新时间:2023-12-01 06:39:07 25 4
gpt4 key购买 nike

假设我有 5 个文件,从 ae。我想并行处理这些。我以为我可以做这样的事情:

my @ltrs = ('a'..'e');

for my $fnum (0..2) {
$pid = fork();
if ($pid) {
push(@childs, $pid);
}
elsif ($pid == 0) {
do {
my $ltr = shift(@ltrs);
print "Open file $ltr on $fnum\n";
} until (scalar(@ltrs)==0);
exit(0);
}
else {
die "Couldn't fork: $!\n";
}
}

foreach (@childs) {
waitpid($_, 0);
}

但是每个子进程都在访问 @ltrs 的所有五个元素:

Open file a on 0
Open file b on 0
Open file c on 0
Open file d on 0
Open file e on 0
Open file a on 1
Open file b on 1
Open file c on 1
Open file d on 1
Open file e on 1
Open file a on 2
Open file b on 2
Open file c on 2
Open file d on 2
Open file e on 2

当一个进程shift数组中的一个元素时,为什么下一个进程查看数组时该元素仍然存在?我假设在第一个 shift 之后,接下来发生的任何过程都会找到一个以 b 开头的数组,但显然我遗漏了一些东西。

最佳答案

数据不在进程之间共享。每个进程都有自己的副本。

如果您想分享,那么整个进程间通信的世界都向您敞开。 perldoc 页面 perlipc告诉你一切。

如果不需要每个实例的完整进程,那么使用线程是另一种方法。与进程不同,线程可以共享数据(尽管它们在 Perl 中默认情况下不这样做)。 perldoc 页面 perlthrtut是这个特定主题的起点。

关于perl - 在 Perl 中访问具有子进程的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13497677/

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