70 lines
1.3 KiB
Perl
70 lines
1.3 KiB
Perl
|
use Thread;
|
||
|
|
||
|
$global = undef;
|
||
|
|
||
|
sub single_file {
|
||
|
use attrs 'locked';
|
||
|
my $who = shift;
|
||
|
my $i;
|
||
|
|
||
|
print "Uh oh: $who entered while locked by $global\n" if $global;
|
||
|
$global = $who;
|
||
|
print "[";
|
||
|
for ($i = 0; $i < int(10 * rand); $i++) {
|
||
|
print $who;
|
||
|
select(undef, undef, undef, 0.1);
|
||
|
}
|
||
|
print "]";
|
||
|
$global = undef;
|
||
|
}
|
||
|
|
||
|
sub start_a {
|
||
|
my ($i, $j);
|
||
|
for ($j = 0; $j < 10; $j++) {
|
||
|
single_file("A");
|
||
|
for ($i = 0; $i < int(10 * rand); $i++) {
|
||
|
print "a";
|
||
|
select(undef, undef, undef, 0.1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub start_b {
|
||
|
my ($i, $j);
|
||
|
for ($j = 0; $j < 10; $j++) {
|
||
|
single_file("B");
|
||
|
for ($i = 0; $i < int(10 * rand); $i++) {
|
||
|
print "b";
|
||
|
select(undef, undef, undef, 0.1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub start_c {
|
||
|
my ($i, $j);
|
||
|
for ($j = 0; $j < 10; $j++) {
|
||
|
single_file("C");
|
||
|
for ($i = 0; $i < int(10 * rand); $i++) {
|
||
|
print "c";
|
||
|
select(undef, undef, undef, 0.1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$| = 1;
|
||
|
srand($$^$^T);
|
||
|
|
||
|
print <<'EOT';
|
||
|
Each pair of square brackets [...] should contain a repeated sequence of
|
||
|
a unique upper case letter. Lower case letters may appear randomly both
|
||
|
in and out of the brackets.
|
||
|
EOT
|
||
|
$foo = new Thread \&start_a;
|
||
|
$bar = new Thread \&start_b;
|
||
|
$baz = new Thread \&start_c;
|
||
|
print "\nmain: joining...\n";
|
||
|
#$foo->join;
|
||
|
#$bar->join;
|
||
|
#$baz->join;
|
||
|
print "\ndone\n";
|