Perl Lock

  • Автор темы VanJo
  • Дата начала
V

VanJo

Гость
#1
Люди знающие, подскажите, отчего мой скрипт под виндовс работает правильно,
а если записать его на сервер (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;
 
21.12.2010
7
0
#2
Какую ошибку выдает?

На сервере Perl откомпилирован с поддержкой ithreads?
 
V

VanJo

Гость
#3
Файл с сервера ошибку вообще не показывает, просто выполняется за эти самые 2 сек.
Если бы выдал ошибку на строке use Thread; или на строке use threads; или на строке use Thread qw/yield/; то обозначилась бы проблема.

Следующий код:
use Config;
print "Content-type: text/html\n\n"; print "<html>\n";
if ($Config{usethreads}) { # We have threads
print 1,"<br>\n";
} else {
print 2,"<br>\n";
}
пишет с сервера 1, т.е. как бы поддержка тредов есть.