SoloCodigo
Programación Web y Scripting => Perl => Mensaje iniciado por: Podwor en Martes 20 de Septiembre de 2005, 20:38
-
Ayuda!!! como puedo hacer para que los distintos thread modifiquen una variable
global ?? Les paso un ejemplo que funciona pero solo modifica la variable en su
ambito y cuando sale de este sigue valiendo lo mismo que al principio;
Gracias!!!
use Thread;
our $a=5;
use strict;
MAIN: {
my $j;
for ($j = 1; $j < 11; $j++){
my $thr = new Thread \&sample_sub, 1;
sleep 1;
}
sleep 5;
}
sub sample_sub {
lock $a;
warn "a sigue : $a";
$a --;
warn "a: $a";
}
-
Me autocontesto, les paso un ejemplo de hilos que llamana a hilos y todos comparten y modifacan la misma variable.
Lo hice con semaforos (que esta comentado) y con variables globales.
Saludos!
use threads;
use threads::shared;
#use Thread::Semaphore;
use strict;
use Data::Dumper;
#my $semaphore = new Thread::Semaphore(5);
my $con:shared = 0;
MAIN: {
my $thr = threads->new(\&baja);
my $thr = threads->new(\&sube);
sleep 10;
#warn Dumper $semaphore;
warn $con;
}
sub baja{
my $j;
for ($j = 1; $j < 20; $j++){
my $thr = threads->new(\&sub_down);
}
}
sub sube{
my $j;
for ($j = 1; $j < 30; $j++){
my $thr = threads->new(\&sub_up);
}
}
sub sub_down {
# $semaphore->down;
lock $con;
$con--;
}
sub sub_up {
# $semaphore->up;
lock $con;
$con ++;
}