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