发信人: ajax(埃阿斯), 信区: Script
标 题: [PERL]子进程是否拥有单独的global variable拷贝?
发信站: 饮水思源 (2014年11月13日00:15:54 星期四), 站内信件


背景:Perl语言,用ForkManager产生多个子进程。
我的理解:这时每个global variable都在每个子进程里
有一个副本?然后每个子进程如果修改这个副本,不会
影响其他子进程也不会影响父进程里的值。

我的理解对吗?

比如下面的示例:

our $var = 0;

my $multi_process = Parallel::ForkManager->new($::n_process_dust);
foreach $i (1..100) {
$multi_process->start and next;
open LOG ...
select LOG ;
...
print $var=$i ;
select STDOUT ;
$multi_process->finish;
}
print $var ; # $var is still 0.

按我的理解,每个子进程里会打印出$i值。但是回到父进程,$var
仍然是0.

然后,select LOG语句也不会改变其他子进程的输出指向。
甚至,最后那个select STDOUT都是多余的。

以上理解对吗?

请大家指教,先谢了!
--

※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 134.104.30.7]