【发布时间】:2017-10-02 15:10:14
【问题描述】:
像我在下面的代码中那样在 Promise 之间共享一个数组是否安全?
#!/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语句前缀返回任何有用的东西。 -
但是
start做的比只返回一些东西。我对并行运行代码的并发部分感兴趣,以便我的 CPU 的所有内核都必须工作。 -
我所说的类似于拿起扳手,然后用它来敲钉子。哪个有效,……我猜。
标签: variables concurrency raku