How do you share arrays in threaded perl?

multithreading, perl

Solution

According to the `threads::shared` documentation that @mpapec cited

By default, variables are private to each thread, and each newly created thread gets a private copy of each existing variable.

So the solution is the module:

use threads::shared ;

our @outputArray :shared ;

There are other forms you can use and a lot of limitations, so reading the entire document is recommended.

Problem

Inside the below sub (a simplified version of code causing an error), each thread should be adding to a master output list. While inside the sub, the array seems to be populating, but when I get back to the main calling portion, it’s empty again. What have I done wrong? ``` #!/usr/bin/env perl use threads; use strict; my $num_threads = 8; my @threads = initThreads(); our @outputArray; foreach(@threads){ $_ = threads->create(\&do_search); } foreach(@threads){ $_->join(); } print "@outputArray"; sub initThreads{ # An array to place our threads in my @initThreads; for(my $i = 1;$i<=$num_threads+1;$i++){ push(@initThreads,$i); } return @initThreads; } sub do_search{ my $id = threads->tid(); push(@outputArray,$id); threads->exit(); } ```

Original source