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