вопрос к знатокам Perl (траблы с многопоточностью)

Модератор: Модераторы разделов

Аватара пользователя
Виталмий
Сообщения: 468
Статус: Любитель
ОС: Gentoo Linux

вопрос к знатокам Perl

Сообщение Виталмий »

есть скрипт. следущей структуры.

Код: Выделить всё

use threads;

....
my @threads;
for(@array){push @threads,threads->create(\&funcmain,@var);}
for (@threads){$_->join}
....

sub funcmain
{
.....
&func1
.....
}

sub func1
{
...
&func2
...
#рекурсия
&func1
}

sub func2
{
....
}


суть следущая: есть фунция funcmain, которая нужна для того что пускать потоки с какими то переменными, она в свою очередь вызывает функцию рекурсию func1, которая в свою использует третью функцию.
у всех функций только локальные переменные.
работа скрипта всегда заканчивается ошибкой Segmentation fauled, этой ошибкой скрипт завершается в разное время, может 5 минут поработать, 10, 20.... я заметил, что он вылетает когда больше половина потоков завершили работу.
ошибочно ли я организую пототи... т.е. можно ли запускать функцию в отдельный поток которая использует другие функции?, хачу заметитить что эти потоки работают только со своими данными(файлы, каталоги).
linux-2.6.17-gentoo-r5 x86 on AMD Athlon XP 2000+
OpenSuse 11.0 x86_64 on Sony VNG-FZ31ER
Спасибо сказали:
tba
Сообщения: 48
ОС: Debian, Centos

Re: вопрос к знатокам Perl

Сообщение tba »

Есть минимальный пример неработающего скрипта? На тривиальных функциях проверил - работает.

P.S. Многопоточных приложений писал мало...
Спасибо сказали:
Аватара пользователя
Виталмий
Сообщения: 468
Статус: Любитель
ОС: Gentoo Linux

Re: вопрос к знатокам Perl

Сообщение Виталмий »

tba писал(а):
10.05.2007 02:00
Есть минимальный пример неработающего скрипта?

наврятли вы его у себя захотите пустить. это паук.
linux-2.6.17-gentoo-r5 x86 on AMD Athlon XP 2000+
OpenSuse 11.0 x86_64 on Sony VNG-FZ31ER
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: вопрос к знатокам Perl

Сообщение v04bvs »

Возможно используются не thread-safe библиотечные функции.
Спасибо сказали:
Аватара пользователя
Виталмий
Сообщения: 468
Статус: Любитель
ОС: Gentoo Linux

Re: вопрос к знатокам Perl

Сообщение Виталмий »

v04bvs писал(а):
10.05.2007 16:17
Возможно используются не thread-safe библиотечные функции.


Код: Выделить всё

use strict;
use LWP::UserAgent;
use Socket;
use threads;


вот и всё
linux-2.6.17-gentoo-r5 x86 on AMD Athlon XP 2000+
OpenSuse 11.0 x86_64 on Sony VNG-FZ31ER
Спасибо сказали: