Parfois il peut être utile de partager une variable entre plusieurs
threads. Cela se fait très simplement avec le module
threads::shared et la fonction shared comme l'illustre l'exemple
suivant :
use threads;
use threads::shared;
use Thread::Semaphore;
use Perl6::Say;
my $number = 1;
share($number);
my $lock = new Thread::Semaphore;
sub iter {
$lock -> down;
$number++;
say $number;
$lock -> up;
}
for(my $i = 1; $i < 100; $i++) {
threads -> create(\&iter) -> detach();
}
sleep(2);
Le module thread::shared propose la fonction lock() qui va bloquer une variable, mais en dehors du fait que celle-ci
n'offre aucune granularité, il est impossible de de-locker une
variable. Celle-ci ne sera disponible que lorsqu'elle ne sera plus
utilisée par le thread qui l'a locké (souvent, à la mort du
thread lui même).