note
mkmcconn
<p>Thanks for the comment, [rob_au]. <br />
Suppose it were used as follows; I can imagine
that neck and neck races would make it go very slow, but would it fail? </p>
<code>
#!/usr/bin/perl -w
use strict;
my $files_like = 'aaa';
for (1..100){
my $next_file = nextuniq($files_like,[map {m/tmp_(\D+)\.txt$/} glob('./tmp_*.txt')]);
while (-e "./tmp_$next_file.txt"){
$next_file = nextuniq($next_file,[map {m/tmp_(\D+)\.txt$/} glob('./tmp_*.txt')]);
print "race condition\n";
}
open TEMP,">./tmp_$next_file.txt" or die;
# do something
close TEMP;
}
sub nextuniq{
my ($test_item,$item_list) = @_;
my $new_item;
my $found = 1;
if (! UNIVERSAL::isa( $item_list, "ARRAY" )){
require Carp;
Carp::croak( "Arg 2 must be an array reference\n");
}
while ($found) {
$found = 0;
foreach $new_item (@$item_list) {
if ($new_item eq $test_item) {
$test_item++;
$found = 1;
}
}
}
$new_item = $test_item;
$new_item;
}
</code>
<p>If it would fail, can it be written so that it can't fail?
<br />
[mkmcconn]
</p>
139992
139992