integrate cfgperl contents into mainline
[p5sagit/p5-mst-13.2.git] / ext / Thread / sync.t
1 use Thread;
2
3 $level = 0;
4
5 sub single_file : locked {
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);
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";