Commit | Line | Data |
d9bb3666 |
1 | use Thread; |
2 | |
3 | $level = 0; |
4 | |
5 | sub single_file { |
8f4f90ac |
6 | use attrs 'locked'; |
d9bb3666 |
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 |
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"; |