This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix various details in win32 makefiles and Config.pm setup.
[perl5.git] / ext / Thread / sync.t
CommitLineData
d9bb3666
MB
1use Thread;
2
3$level = 0;
4
5sub single_file {
8f4f90ac 6 use attrs 'locked';
d9bb3666
MB
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
16sub 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
28sub 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
40sub 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;
53srand($$^$^T);
d9bb3666
MB
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();
61print "main: threads finished, exiting\n";