ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 05.01.2010, 04:41
Fepsis
Постоянный
Регистрация: 17.09.2008
Сообщений: 562
С нами: 9288386

Репутация: 536


По умолчанию

Вопрос по потокам:

В скрипте задаётся массив @bas с некоторым количеством элементов...

Создаю процедуру, которая извлекает по одному элементу массива и дописывает его в файл... Сама процедура:
PHP код:
sub gogo
{
   
my ($name) = @_;
   while(
$elm = shift(@bas))
   {
      
open(OUT, ">> $name.txt");
      print 
OUT "$elm\r\n";
      
close(OUT);
   }
} 
Далее создаю несколько потоков, выполняющих функцию gogo и прописываю ждать завершения работы всех потоков...
PHP код:
foreach $ac (@acc)
{
    
push @threads, threads->create(\&gogo, $ac);
}


foreach 
my $thread (@threads) 
{
    
$thread->join();
} 
Каждый поток создаёт свой файл, куда записывает элементы массива, которые он обработал (извлёк из массива)...
Что я ожидал от работы этого скрипта..?? Ожидал я, что элементы массива @bas будут распределены по файлам потоков.. тоесть первый поток вытащил первый элемент, записал в свой файл, второй поток - второй элемент, и записал уже в свой файл.. и т.д.

А в результате каждый поток пробегает весь массив целиком... Причём я даже пробовал каждому из потоков задать разные задержки.. Почему так происходит, я же извлекаю элементы с помощью shift, который удаляет элемент..?! Как лучше реализовать задуманное..?!
 
Ответить с цитированием
 



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
[php] Новичкам: задаем вопросы _Great_ PHP 16396 17.06.2010 21:19
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.