But I get error : Invalid value for shared scalar at c:\perl\lib\Queue.pm 90. When I remove use threads; code works OK. Any ideas how to put record in right way? But I need "use threads;" because without it my queue not sharing between threads. Following example illustrate what I mean#I try to put in queue my record use threads; use Thread::Queue; use Data::Dumper; my $queue = new Thread::Queue; $msg{'1'} = "Hello \n"; $msg{'2'}= "Word \n"; $queue->enqueue(\%msg); $r = $queue->dequeue_nb; print "r = $r\n"; print "1 : ".$r->{'1'}; print "2: ".$r->{'2'};
Code works OK. queue shared between threads. when I comment "use threads;" and run code, I can see that queue not shared between threads. Every thread have separated queue. How to solve it ? Thanks.#test for sharing queue between threads use threads; use Thread::Queue; use Data::Dumper; use Thread; my $queue = new Thread::Queue; sub th1 { while(1) { $queue->enqueue("msg from th1"); print "th1: ADDED ".$queue->pending."\n"; sleep 2; } } sub th2 { while(1) { print "th2: REMOVED ".$queue->pending."\n"; $queue->dequeue_nb; sleep 2; } } $th1 = new Thread(\&th1); $th2 = new Thread(\&th2); $th1->join; $th2->join;
In reply to thread queue shared variable problem, URGENT. by denis.ua
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |