Bonjour,
Je suis tombé sur une page (http://perl.enstimac.fr/DocFr/perlth...%20partag%E9es) où il est écrit
La plus grande différence entre les ithreads de Perl et les vieux threads 5.005, ou d'ailleurs n'importe quel autre système de threads, est que par défaut, aucune donnée n'est partagée. Quand un nouveau thread Perl est créé, toutes les données associées au thread courant sont copiées vers le nouveau thread, et sont dorénavant données privées du nouveau thread ! C'est similaire dans l'esprit à ce qui arrive quand un processus UNIX fait un fork(), sauf que dans notre cas les données sont copiées vers une partie différente de la mémoire à l'intérieur du même processus, sans qu'un vrai fork() ait lieu.
Il est précisé que pour partager des données entre les différents threads, il faut utiliser le module threads::shared.
J'ai donc essayé de modifier le constructeur:
1 2 3 4 5 6 7 8
| sub new
{
my ($self) = @_; #la fonction reçoit comme premier paramètre le nom de la classe
my $classe = ref($self) || $self;;
my $this : shared = {};
bless ($this,$classe);
return $this;
} |
Résultat à l'éxécution:
Invalid value for shared scalar at...
à la ligne "my $this : shared = {};". J'ai alors essayé ça:
1 2 3 4 5
| sub start {
my ($this,$clientSocket) = @_;
share($this)
$this->{clientThread} = threads->create "read_client",$this,$clientSocket);
} |
Résultat même exception mais sur le threads->create.
Comment partager $this entre les différents threads???
Merci de votre aide!
Partager