Update README.threads amd Thread/README
[p5sagit/p5-mst-13.2.git] / sync2.t
1 use Thread;
2
3 $global = undef;
4
5 sub single_file {
6     use attrs 'locked';
7     my $who = shift;
8     my $i;
9
10     print "Uh oh: $who entered while locked by $global\n" if $global;
11     $global = $who;
12     print "[";
13     for ($i = 0; $i < int(50 * rand); $i++) {
14         print $who;
15     }
16     print "]";
17     $global = undef;
18 }
19
20 sub start_a {
21     my ($i, $j);
22     for ($j = 0; $j < 50; $j++) {
23         single_file("A");
24         for ($i = 0; $i < int(50 * rand); $i++) {
25             print "a";
26         }
27     }
28 }
29
30 sub start_b {
31     my ($i, $j);
32     for ($j = 0; $j < 50; $j++) {
33         single_file("A");
34         for ($i = 0; $i < int(50 * rand); $i++) {
35             print "b";
36         }
37     }
38 }
39
40 sub start_c {
41     my ($i, $j);
42     for ($j = 0; $j < 50; $j++) {
43         single_file("c");
44         for ($i = 0; $i < int(50 * rand); $i++) {
45             print "C";
46         }
47     }
48 }
49
50 $| = 1;
51 srand($$^$^T);
52
53 $foo = new Thread \&start_a;
54 $bar = new Thread \&start_b;
55 $baz = new Thread \&start_c;
56 print "\nmain: joining...\n";
57 $foo->join;
58 $bar->join;
59 $baz->join;