| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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; } то есть я считал так, что модуль сам "понимает" (я ж не ассемблере все таки в момент одновременного обращения к нему из потоков $queue_job -> dequeue ()) как ему не отдать задание дважды, как "выстроить очередь", потому что в теории возможно же ведь одновременное обращение за заданиями? *********** сегодня схема дала сбой то есть задания дублируются.. происходит чехарда. Вопрос. $str = $queue_job -> dequeue () не гарантирует построения "нормальной очереди"? нужно еще что то проверять? Спасибо. |
| Автор: burakov 11.4.2013, 12:50 |
| нашел ошибку. (повторно добавлял просто задание). хороший модуль. работает как надо. |