freebsd-dev/contrib/perl5/ext/Thread/sync2.t

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";