• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Perl Lock

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

VanJo

Люди знающие, подскажите, отчего мой скрипт под виндовс работает правильно,
а если записать его на сервер (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;
 
C

chorny

Какую ошибку выдает?

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

VanJo

Файл с сервера ошибку вообще не показывает, просто выполняется за эти самые 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, т.е. как бы поддержка тредов есть.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!