• Jueves 28 de Marzo de 2024, 10:26

Autor Tema:  Mas Hilos, Problemas Con Variables Globales  (Leído 2741 veces)

Podwor

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Mas Hilos, Problemas Con Variables Globales
« en: Martes 20 de Septiembre de 2005, 20:38 »
0
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";
    }

Podwor

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Mas Hilos, Problemas Con Variables Globales
« Respuesta #1 en: Martes 20 de Septiembre de 2005, 21:47 »
0
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 ++;
  }