Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > многопоточность. Thread::Queue


Автор: burakov 11.4.2013, 10: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 ()
не гарантирует построения "нормальной очереди"?
нужно еще что то проверять?


Спасибо.






Автор: burakov 11.4.2013, 12:50
нашел ошибку. (повторно добавлял просто задание).
хороший модуль.  работает как надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)