Comment detail

ワーカスレッドを安全に終了させるまで待機 (Nested Flatten)

Perlでthreadsを使うためには、-DusethreadsをつけてConfigureする必要がありますが、いちおうそうなっているという前提で。

本質的なのは、

1 while threads->list(threads::running);

だけです。threadsを再利用するか否かは関係なく使えます。

どちらかというと、threadsは使い捨てにした方がコードは書きやすいですね。

Dan the Threaded Perl Monger

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/local/bin/perl
use strict;
use warnings;
use threads;
use Time::Hires qw/sleep/;

my @thr;
for my $i ( 1 .. shift || 10 ) {
    push @thr, threads->create(
        sub {
            my $n = shift;
            my $s = rand(10.0);
            sleep $s;
            warn "$n:slept $s sec.";
        },
        $i
    );
}

1 while threads->list(threads::running);
warn "All Threads Done";

$thr[0]->join();    # on purpose

END {
    $_->is_joinable() and $_->join() for @thr;
}

Index

Feed

Other

Link

Pathtraq

loading...