Commit | Line | Data |
---|---|---|
d9bb3666 MB |
1 | use Thread; |
2 | ||
3 | $level = 0; | |
4 | ||
5 | sub single_file { | |
8f4f90ac | 6 | use attrs 'locked'; |
d9bb3666 MB |
7 | my $arg = shift; |
8 | $level++; | |
9 | print "Level $level for $arg\n"; | |
10 | print "(something is wrong)\n" if $level < 0 || $level > 1; | |
11 | sleep 1; | |
12 | $level--; | |
13 | print "Back to level $level\n"; | |
14 | } | |
15 | ||
16 | sub start_bar { | |
17 | my $i; | |
18 | print "start bar\n"; | |
19 | for $i (1..3) { | |
20 | print "bar $i\n"; | |
21 | single_file("bar $i"); | |
22 | sleep 1 if rand > 0.5; | |
23 | } | |
24 | print "end bar\n"; | |
25 | return 1; | |
26 | } | |
27 | ||
28 | sub start_foo { | |
29 | my $i; | |
30 | print "start foo\n"; | |
31 | for $i (1..3) { | |
32 | print "foo $i\n"; | |
33 | single_file("foo $i"); | |
34 | sleep 1 if rand > 0.5; | |
35 | } | |
36 | print "end foo\n"; | |
37 | return 1; | |
38 | } | |
39 | ||
40 | sub start_baz { | |
41 | my $i; | |
42 | print "start baz\n"; | |
43 | for $i (1..3) { | |
44 | print "baz $i\n"; | |
45 | single_file("baz $i"); | |
46 | sleep 1 if rand > 0.5; | |
47 | } | |
48 | print "end baz\n"; | |
49 | return 1; | |
50 | } | |
51 | ||
52 | $| = 1; | |
53 | srand($$^$^T); | |
d9bb3666 MB |
54 | |
55 | $foo = new Thread \&start_foo; | |
56 | $bar = new Thread \&start_bar; | |
57 | $baz = new Thread \&start_baz; | |
58 | $foo->join(); | |
59 | $bar->join(); | |
60 | $baz->join(); | |
61 | print "main: threads finished, exiting\n"; |