next up previous contents
suivant: Récupérer la valeur de monter: La programmation multi-threadée précédent: Utiliser les sémaphores   Table des matières

Partager une variable entre plusieurs threads

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).



2006-03-15