- 論壇徽章:
- 0
|
本帖最后由 turningA 于 2014-08-30 09:49 編輯
各位好!首次發(fā)帖。多多指教!
請教一個關(guān)于multithreading里傳遞參數(shù)的問題。
當我不用multithreading的時候,以下是work的。
Version 1:
- my %readMap1;
- parseInputFile(\%readMap1,$inFileName1,$end1);
- my %readMap2;
- parseInputFile(\%readMap2,$inFileName2,$end2);
- sub parseInputFile
- {
- my ($readMapRef, $file, $anchor) = @_;
- ...
- }
復制代碼 當我用multithreading的時候,以下是不work的。
Version 2:
- my %readMap1;
- my @Threadsinput=();
- my $trd= threads -> new ( sub {parseInputFile(\%readMap1,$inFileName1,$end1)} );
- push (@Threadsinput, $trd);
- my %readMap2;
- my $trd= threads -> new ( sub {parseInputFile(\%readMap2,$inFileName2,$end2)} );
- push (@Threadsinput, $trd);
- foreach my $thr (@Threadsinput)
- {
- print $thr->tid, " threadID\n";
- $thr->join;
- }
- sub parseInputFile
- {
- my ($readMapRef, $file, $anchor) = @_;
- ...
- }
復制代碼 單步調(diào)試顯示join后兩個hashes 都是空的。
于是我換了一個思路:通過子程序返回值把hash返回,以下是work的,。
version 3:
- my %readMap1;
- my @Threadsinput=();
- my $trd= threads -> new ( sub {parseInputFile($inFileName1,$end1)} );
- push (@Threadsinput, $trd);
- my %readMap2;
- my $trd= threads -> new ( sub {parseInputFile($inFileName2,$end2)} );
- push (@Threadsinput, $trd);
- my @mapArr=();
- foreach my $thr (@Threadsinput)
- {
- my $mapHashRef=$thr->join;
- push @mapArr, \%{$mapHashRef};
- }
- sub parseInputFile
- {
- my ( $file, $anchor) = @_;
- my %readMapRef=();
- ...
- ##in this subroutine, I will write something into this hash: %readMapRef
- [b]return \%readMapRef;[/b]
- }
復制代碼 我的問題是: 為什么把全局變量hash以引用的方式傳入子函數(shù),并把子程序multithreading,不work呢?
|
|