- 论坛徽章:
- 0
|
本帖最后由 hwcomcn 于 2014-08-14 09:34 编辑
谢谢大神们
2楼,4楼都都正解
但又遇到新问题:
普通数组可以定义成my $xxx : shared (比如我要同时多进程远程登陆多台主机,想并行登陆,还需要进程间共享变量)
普通数组比如- my @sublist : shared = ("proj_001","proj_002","proj_003","proj_004","proj_005","proj_006","proj_007","proj_008");
复制代码 是不会出错的
但是下面的两个若加上shared会报错- #my @sublist = (\&proj_001, \&proj_002, \&proj_003, \&proj_004, \&proj_005, \&proj_006, \&proj_007, \&proj_008);
- my @sublist : shared = (\&proj_001, \&proj_002, \&proj_003, \&proj_004, \&proj_005, \&proj_006, \&proj_007, \&proj_008);
复制代码 或者- #my @sublist = ("proj_001","proj_002","proj_003","proj_004","proj_005","proj_006","proj_007","proj_008");
- #$_ = \&{$_} for @sublist;
- my @sublist : shared = ("proj_001","proj_002","proj_003","proj_004","proj_005","proj_006","proj_007","proj_008");
- $_ = \&{$_} for @sublist;
复制代码 贴上代码:- #!/usr/bin/perl
- use warnings;
- #use strict;
- use threads;
- use threads::shared;
- #my @sublist : shared = (\&proj_001, \&proj_002, \&proj_003, \&proj_004, \&proj_005, \&proj_006, \&proj_007, \&proj_008);
- my @sublist = (\&proj_001, \&proj_002, \&proj_003, \&proj_004, \&proj_005, \&proj_006, \&proj_007, \&proj_008);
- my $t1 = threads->create( \&thread_a );
- my $t2 = threads->create( \&thread_b );
- sub thread_a
- {
- while(@sublist>0)
- {
- my $infosub = shift @sublist;
- $infosub->();
- sleep 2;
- }
- }
- sub thread_b
- {
- while(@sublist>0)
- {
- my $infosub = shift @sublist;
- $infosub->();
- sleep 2;
- }
- }
- $t1->join();
- $t2->join();
-
- sub proj_001 {
- print "in sub proj_001","\n";
- }
- sub proj_002 {
- print "in sub proj_002","\n";
- }
- sub proj_003 {
- print "in sub proj_003","\n";
- }
- sub proj_004 {
- print "in sub proj_004","\n";
- }
- sub proj_005 {
- print "in sub proj_005","\n";
- }
- sub proj_006 {
- print "in sub proj_006","\n";
- }
- sub proj_007 {
- print "in sub proj_007","\n";
- }
- sub proj_008 {
- print "in sub proj_008","\n";
- }
复制代码 第7行和第8行的注释换一下就报错
想要的结果是每个进程执行一遍,不是执行2遍
|
|