многопоточность. Thread::Queue

 
0
 
Perl
ava
burakov | 11.04.2013, 11:24
Добрый день.
всегда считал, что

Thread::Queue
это средство, которое позволяет обмениваться данными между потоками
корректно .

то есть применительно к граберу.
всегда использовал схему (2 года обкатки -- ни одного сбоя).

когда один поток добавляет задание из базы данных

$queue_job -> enqueue ($_); 


а в остальных потоках, происходит работа над этим заданием

while (my $str = $queue_job -> dequeue ()) {
        my $tid = threads -> tid (); $tid_hash {$tid} = 1; 
}

то есть я считал так, что модуль сам "понимает" (я ж не ассемблере все таки smile программирую)
в момент одновременного обращения к нему из потоков
$queue_job -> dequeue ())

как ему не отдать задание дважды, как "выстроить очередь", потому что в теории возможно же ведь одновременное обращение за заданиями?


***********
сегодня схема дала сбой
то есть задания дублируются.. происходит чехарда.


Вопрос.
$str = $queue_job -> dequeue ()
не гарантирует построения "нормальной очереди"?
нужно еще что то проверять?


Спасибо.





Comments (1)
ava
burakov | 11.04.2013, 12:50 #
нашел ошибку. (повторно добавлял просто задание).
хороший модуль.  работает как надо.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  burakov
advanced
Submit