【问题标题】:How to declare a shared attribute using threads::shared?如何使用threads::shared声明共享属性?
【发布时间】:2014-10-19 01:36:24
【问题描述】:

使用threads::shared,可以像这样声明一个共享变量:

my $n_lines_waiting: shared = 0;

使用 Moose,属性通过 'has' 声明:

has 'p_queue' => (is => 'ro', isa => 'Thread::Queue', default => sub{ return Thread::Queue->new(); });

有没有办法将threads::shared 和Moose 结合起来?我想使用 Moose 的漂亮语法来声明一个可以在线程之间共享的属性。

【问题讨论】:

    标签: multithreading perl moose


    【解决方案1】:

    它应该像更改默认值以包含相同的语法一样简单:

    'default' => sub {
        my $queue :shared = Thread::Queue->new();
        return $queue
    },
    

    【讨论】:

    • 嗨!不幸的是,这没有奏效。使用上述方法声明属性会导致每个线程的值不同。似乎将变量作为 moose 属性访问的行为就像它没有被共享一样。
    • @capfan 我试过了,它对我有用。使用这个对象的代码是什么样的?
    • 当然,给你:gist.github.com/asb-capfan/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2017-10-07
    相关资源
    最近更新 更多