【问题标题】:How to create a shared variable in perl(array of hashes) [duplicate]如何在perl(哈希数组)中创建共享变量[重复]
【发布时间】:2012-06-23 03:53:59
【问题描述】:

可能重复:
Perl: Threading with shared multi-dimensional hash

我有一段代码看起来像这样(过于简化):

my @arr;
foreach $t (1..8){
     load_arr($t);
}

sub load_arr{
    my ($t) = @_;
    #get some data form somewhere
    #and put it into $a, $b, $c, $d
    $arr[$t]{$a}{$b}{$c} = $d;
}

load_arr 实际上需要很长时间,因为它在大型数据集上循环(为简单起见未显示循环)

我想重写代码看起来像这样。

my @arr :shared;
my @threads;
foreach $t (1..8){
    push @threads, threads->create(\&load_arr,$t);
}
$->join for @threads;
....

问题是当我运行它时,我收到以下错误:

Thread 1 terminated abnormally: Invalid value for shared scalar at ...

我正在寻求有关如何正确分享这些内容的帮助?

谢谢

【问题讨论】:

标签: multithreading perl


【解决方案1】:

我用这样的东西。

#!/usr/bin/perl -w
use threads;
use threads::shared;
my  @ThreadInput  :shared=();

@ThreadInput 对我的脚本中生成的所有线程都是可见的。

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2011-04-21
    • 2014-04-13
    • 2018-04-11
    • 2018-12-07
    相关资源
    最近更新 更多