V
VanJo
Люди знающие, подскажите, отчего мой скрипт под виндовс работает правильно,
а если записать его на сервер (UNIX) то выдает ошибку, т.е. не работает ни lock, ни семафор,
и вместо 3 сек. выполняется за 2 сек?
а если записать его на сервер (UNIX) то выдает ошибку, т.е. не работает ни lock, ни семафор,
и вместо 3 сек. выполняется за 2 сек?
Код:
#!/usr/bin/perl
use strict; use CGI::Carp qw(fatalsToBrowser);
use Thread; #use threads;
use Thread qw/yield/; print "Content-type: text/html\n\n"; print "<html>\n";
my $lock : shared=0; #$lock = 0;
use Thread::Semaphore;
my $s = new Thread::Semaphore;
sub f {
if($lock ==0){yield;$lock++;}
lock $lock; #while($lock){}
$s->down;
$a++;
my ($a)=@_;
print time, " WAIT $a<br>\n";
sleep 1;
print time," DONE $a<br>\n";
#$lock--;
$s->up;
return time," RESULT $a<br>\n";
}
my $a =new threads(\&f, 'A'); print time, "<br>\n";
my $b =new threads(\&f, 'B'); print time, "<br>\n";
print time, $a->join;
print time, " 1111 ", scalar threads->list , "<br>\n";
print time, $b->join;
print time, " 2222 ", scalar threads->list , "<br>\n";
print $lock;