是否安全,在承諾之間共享一個數組,像我在下面的代碼中做的那樣?在線程之間共享數組是否安全?
#!/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的所有內核都必須工作。 –
我在說的是類似於拿起扳手,然後用它來敲擊指甲。哪個工作,...我猜。 –