![]() |
perl + потоки = геморой
use threads;
for(1..$thread){threads->create(\&brut);} lol: if($thread<10) {threads->create(\&brut);sleep(2);goto(lol);} sub brut { $thread=$thread-1; } вот код сначала создаем потоки а потом периодически нужно проверять их колчество и если некоторые уже отработали то создавать новые -- но из подпроцесса нельзя изменить переменную находящуюся в осн цикле программы -- что делать?? |
правильно спроектировать.
подскажу: потоки не должнны заканчиваться. Если поток сделал часть работы, то просто пусть берет следующую часть. Хотя это обходной путь, но он легче ;) |
хм а это идея -- хотя продолжение его работы возможно только с исзменение внешней переменной -- мой скрипт берет из массива пароли на проверку --- и нужно знать какие брать пароли каждому потоку -- следовательно смещать указатель в массиве
|
все ненадо уже
получилось так use threads; use threads::shared; my $num : shared; тогда переменную $num мона изменять откуда угодно |
а не проще сделать многопоточность на форках?
преимущества: 1) функция fork() есть всегда 2) нет гемора как с модулям тредов 3) много готовых примеров |
Нет, не проще:
1) модули тоже 2) гемора намного меньше с тредами 3) аналогично 4) делать потоки через потоки - правильно 5) в тредах есть общие переменные |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Кстати и perl обычно скомпилен бывает без поддержки fork() Цитата:
|
Цитата:
последний пост + посмотри на дату |
| Время: 16:04 |