Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / perl5 / ext / Thread / sync.t
1 use Thread;
2
3 $level = 0;
4
5 sub single_file {
6     use attrs 'locked';
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);
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";