如何将共享数据传递给Perl中的线程?

Tak*_*kun 1 perl multithreading

use threads;
use threads::shared;

sub test {
    my $s :shared = 22;
    my $thread = threads->new(\&thrsub);

    $thread->join();
    print $s;

}

sub thrsub {
    $s = 33;
}

test;
Run Code Online (Sandbox Code Playgroud)

为什么不在线程中共享数据?

ike*_*ami 6

它共享变量,但您访问的变量与您共享的变量不同.(use strict;会告诉你在这种情况下有不同的变量.总是使用use strict; use warnings;)修复是使用单个变量.

my $s :shared = 22;

sub test {
    my $thread = threads->new(\&thrsub);
    $thread->join();
    print $s;
}

sub thrsub {
    $s = 33;
}

test;
Run Code Online (Sandbox Code Playgroud)