1 | BEGIN {
|
---|
2 | eval { require Config; import Config };
|
---|
3 | if ($@) {
|
---|
4 | print "1..0 # Skip: no Config\n";
|
---|
5 | exit(0);
|
---|
6 | }
|
---|
7 | }
|
---|
8 |
|
---|
9 | use Thread;
|
---|
10 |
|
---|
11 | $global = undef;
|
---|
12 |
|
---|
13 | sub single_file : locked {
|
---|
14 | my $who = shift;
|
---|
15 | my $i;
|
---|
16 |
|
---|
17 | print "Uh oh: $who entered while locked by $global\n" if $global;
|
---|
18 | $global = $who;
|
---|
19 | print "[";
|
---|
20 | for ($i = 0; $i < int(10 * rand); $i++) {
|
---|
21 | print $who;
|
---|
22 | select(undef, undef, undef, 0.1);
|
---|
23 | }
|
---|
24 | print "]";
|
---|
25 | $global = undef;
|
---|
26 | }
|
---|
27 |
|
---|
28 | sub start_a {
|
---|
29 | my ($i, $j);
|
---|
30 | for ($j = 0; $j < 10; $j++) {
|
---|
31 | single_file("A");
|
---|
32 | for ($i = 0; $i < int(10 * rand); $i++) {
|
---|
33 | print "a";
|
---|
34 | select(undef, undef, undef, 0.1);
|
---|
35 | }
|
---|
36 | }
|
---|
37 | }
|
---|
38 |
|
---|
39 | sub start_b {
|
---|
40 | my ($i, $j);
|
---|
41 | for ($j = 0; $j < 10; $j++) {
|
---|
42 | single_file("B");
|
---|
43 | for ($i = 0; $i < int(10 * rand); $i++) {
|
---|
44 | print "b";
|
---|
45 | select(undef, undef, undef, 0.1);
|
---|
46 | }
|
---|
47 | }
|
---|
48 | }
|
---|
49 |
|
---|
50 | sub start_c {
|
---|
51 | my ($i, $j);
|
---|
52 | for ($j = 0; $j < 10; $j++) {
|
---|
53 | single_file("C");
|
---|
54 | for ($i = 0; $i < int(10 * rand); $i++) {
|
---|
55 | print "c";
|
---|
56 | select(undef, undef, undef, 0.1);
|
---|
57 | }
|
---|
58 | }
|
---|
59 | }
|
---|
60 |
|
---|
61 | $| = 1;
|
---|
62 | srand($$^$^T);
|
---|
63 |
|
---|
64 | print <<'EOT';
|
---|
65 | Each pair of square brackets [...] should contain a repeated sequence of
|
---|
66 | a unique upper case letter. Lower case letters may appear randomly both
|
---|
67 | in and out of the brackets.
|
---|
68 | EOT
|
---|
69 | $foo = new Thread \&start_a;
|
---|
70 | $bar = new Thread \&start_b;
|
---|
71 | $baz = new Thread \&start_c;
|
---|
72 | print "\nmain: joining...\n";
|
---|
73 | #$foo->join;
|
---|
74 | #$bar->join;
|
---|
75 | #$baz->join;
|
---|
76 | print "\ndone\n";
|
---|