Как мне использовать Perl `Thread :: Pool :: Simple`? - PullRequest
2 голосов
/ 19 сентября 2010

Я использую Thread::Pool::Simple для многопоточности. У меня есть пара вопросов, которые являются общими для многопоточности, я думаю:

Каждая из моих тем может умереть, если случится что-то неожиданное. Я полностью согласен с этим, так как это означает, что некоторые из моих утверждений неверны, и мне нужно переделать код. В настоящее время, когда умирает какой-либо поток, основная программа (вызывающий поток) также умирает, получая что-то вроде:

Perl exited with active threads:
    0 running and unjoined
    0 finished and unjoined
    4 running and detached
  1. Они "бегут и отстранены" зомби? Они "опасны" в любом путь? Есть ли способ убить всех их, если какой-либо из потоков умирает? Какое общее решение для таких сценарии?
  2. Как правило, моя работа независима. Тем не менее, я передаю каждый из них как аргумент уникальный хеш, который взятый из одного большого хэша поток может изменить это личный хеш (но он не может добраться до большой хэш - это даже не знать об этом). Следовательно, я думаю, я не нужны замки и т. д. что-то пропустил?

1 Ответ

0 голосов
/ 19 сентября 2010

Когда ваша основная программа завершает работу, все потоки прекращаются.

Потоки Perl работают одним из двух способов.

1) Вы можете использовать join:

my $thr = threads->create(...);
# do something else while thread works
my $return = $thr->join(); # wait for thread to terminate and fetch return value

2) Вы можете использовать detach:

my $thr = threads->create(...);
$thr->detatch(); # thread will discard return value and auto-cleanup when done

В этом сообщении перечислены потоки, которые не были очищены до завершения программы. «Работает и не присоединился» - это случай 1, который все еще работает. «Завершено и не присоединено» - это случай 1, готово, но возвращаемое значение еще не получено. «Работает и отсоединен» - это случай 2, все еще работающий.

То есть, у вас есть 4 потока, которые были отсоединены, но не закончили до смерти программы. Из этого нельзя сказать, закончили бы они, если бы программа работала дольше, или они застряли в бесконечном цикле, или оказались в тупике, или как.

Вам не нужны замки для описываемой вами ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...