是否安全,在承诺之间共享一个数组,像我在下面的代码中做的那样?在线程之间共享数组是否安全?
#!/usr/bin/env perl6
use v6;
sub my_sub ($string, $len) {
my ($s, $l);
if $string.chars > $len {
$s = $string.substr(0, $len);
$l = $len;
}
else {
$s = $string;
$l = $s.chars;
}
return $s, $l;
}
my @orig = <length substring character subroutine control elements now promise>;
my $len = 7;
my @copy;
my @length;
my $cores = 4;
my $p = @orig.elems div $cores;
my @vb = (0..^$cores).map: { [ $p * $_, $p * ($_ + 1) ] };
@vb[@vb.end][1] = @orig.elems;
my @promise;
for @vb -> $r {
@promise.push: start {
for $r[0]..^$r[1] -> $i {
(@copy[$i], @length[$i]) = my_sub(@orig[$i], $len);
}
};
}
await @promise;
承诺的重点在于承诺返回某些东西,而不是有意从'start'语句前缀中返回任何有用的东西。 –
但是'开始'确实只会返回一些东西。我对并发部分感兴趣,并行运行代码,以便我的CPU的所有内核都必须工作。 –
我在说的是类似于拿起扳手,然后用它来敲击指甲。哪个工作,...我猜。 –