in reply to Store last value of for loop
What you need to do is use threads::shared then share $i across threads. That way no matter what thread updates it, the others will see the update. With one caveat. There might be a possible race condition where 2 threads try to ++ at the same time and you create a problem internally. This should be rare, but to be safe you should lock. So that looks something like this:
Note that if you want to put long-running code in that loop you will lose the benefits of threading because different threads will block on the lock on $i. If you want to solve that you can do this:use strict; use threads; use threads::shared; my $i :shared; $i = 1; # Time and code passes. for my $id (@article_id) { lock($i); print "$i\n"; $i++; } # More code.
use strict; use threads; use threads::shared; { my $i :shared; sub get_i { lock($i); return ++$i; } } # Time and code passes. for my $id (@article_id) { my $i = get_i(); print "$i\n"; # Do lengthy processing. } # More code.
Update: johngg pointed out that the modules were named threads but my code called them thread instead. Fixed.
|
|---|