+ $self->barrier;
+}
+
+sub barrier_init {
+ my ($self, $n) = @_;
+ $self->{bnote} or return;
+ --$n;
+ my $barrier = { map { $_ => 1 } (0..$n) };
+}
+
+sub barrier_wait {
+ my ($self, $barrier) = @_;
+ my $bnote = $self->{bnote} or return;
+ my $r = $bnote->[0];
+ while (scalar keys %$barrier) {
+ defined(my $l = $r->getline) or die "EOF on barrier_wait: $!";
+ $l =~ /\Abarrier (\d+)/ or die "bad line on barrier_wait: $l";
+ delete $barrier->{$1} or die "bad part[$1] on barrier wait";
+ }