Есть проблема с простым Perl-скриптом:
---------------------------------------------------------------------
use strict;
use warnings;
use threads;
use threads::shared;
use POSIX;
my $print_mutex : shared;
#####################################################################
sub _print($)
{
my $str = shift;
lock($print_mutex);
my $id = threads->tid();
my $time = strftime('%H:%M:%S', localtime time);
print «$time [$id] $str»;
return;
}
#####################################################################
sub run()
{
for my $i (1 .. 3)
{
_print(«Begin $i\n»);
sleep 1;
_print(«End $i\n»);
}
return threads->tid();
}
#####################################################################
_print «Starting test.\n»;
my @threads;
for my $thr_num (1 .. 2)
{
my $thr = threads->create('run');
push @threads, $thr;
_print «Thread created.\n»;
}
foreach (@threads)
{
my $id = $_->join;
_print «Thread '$id' finished.\n»;
}
_print «Test finished.\n»;
#####################################################################
---------------------------------------------------------------------
Когда запускаю его на Linux с Perl-5.10 все работает корректно:
$ perl /tmp/a.pl
14:25:54 [0] Starting test.
14:25:54 [0] Thread created.
14:25:54 [1] Begin 1
14:25:54 [0] Thread created.
14:25:54 [2] Begin 1
14:25:55 [1] End 1
14:25:55 [1] Begin 2
14:25:55 [2] End 1
14:25:55 [2] Begin 2
14:25:56 [1] End 2
14:25:56 [1] Begin 3
14:25:56 [2] End 2
14:25:56 [2] Begin 3
14:25:57 [1] End 3
14:25:57 [0] Thread '1' finished.
14:25:57 [2] End 3
14:25:57 [0] Thread '2' finished.
14:25:57 [0] Test finished.
$
А вот когда я запускаю этот же скрипт через SSH, то вижу какой-то бред (смотрите на таймстампы и ID потоков):
$ ssh localhost 'perl /tmp/a.pl'
14:26:11 [0] Starting test.
14:26:11 [0] Thread created.
14:26:11 [1] Begin 1
14:26:12 [1] End 1
14:26:12 [1] Begin 2
14:26:13 [1] End 2
14:26:13 [1] Begin 3
14:26:14 [1] End 3
14:26:11 [2] Begin 1
14:26:12 [2] End 1
14:26:12 [2] Begin 2
14:26:13 [2] End 2
14:26:13 [2] Begin 3
14:26:14 [2] End 3
14:26:11 [0] Thread created.
14:26:14 [0] Thread '1' finished.
14:26:14 [0] Thread '2' finished.
14:26:14 [0] Test finished.
$
Никогда не видел ничего подобного на однопоточных Perl-скриптах и заметил что проблема с I/O начинается после создания первого потока.
Проверял этот же скрипт на Windows с Perl-5.12 и получил те же результаты. Так что похоже что проблема не с конкретной версией Perl или OS.
В чем тут дело?
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Olegymous
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от Olegymous
Ответ на:
комментарий
от Vovka-Korovka
Ответ на:
Не справился с управлением
от Olegymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Ошибка: undefined reference to 'shm_unlink' (2010)
- Форум BOOST thread не понимаю ... (2011)
- Форум Perl: RegEx: Самый правильный способ сделать это? (2010)
- Форум BIND на Debian 5.0.6 (Lenny) (2010)
- Форум X'ы безмерно глючат :( (2003)
- Форум SSH - connection refused (2017)
- Форум количество открытых файлов для OpenLDAP (2010)
- Форум Perl + FastCGI + nginx (2009)
- Форум Debian Lenny 5.0.7 exim 4.69-9 уязвим (2010)
- Форум Capistrano. Dont know how to build task. И прочее. (2013)