Tengo el siguiente problema: necesito crear n cantidad de hilos y pasar los datos de un array por cada hilo. Leí la documentación de ::shared pero no lo entendí :S , esto es lo que llevo.
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use threads;
use threads::shared;
use Thread qw/async yield/;
#use Thread qw(async);
#no warnings 'threads';
my@dir : shared=qw(
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
);
system'clear';
my @threads;
for(my $i=0; $i<3; $i++){
push(@threads, threads->new(\&SCAN));
}
foreach my $thr (@threads){
$thr->join();
}
sub SCAN{
foreach my$scan(@dir){
my $tid = Thread->self->tid;
print"N hilo: $tid\t".$scan."\n";
}}
use strict;
use threads;
use threads::shared;
use Thread qw/async yield/;
#use Thread qw(async);
#no warnings 'threads';
my@dir : shared=qw(
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
);
system'clear';
my @threads;
for(my $i=0; $i<3; $i++){
push(@threads, threads->new(\&SCAN));
}
foreach my $thr (@threads){
$thr->join();
}
sub SCAN{
foreach my$scan(@dir){
my $tid = Thread->self->tid;
print"N hilo: $tid\t".$scan."\n";
}}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
El resultado:
- Código: Seleccionar todo
N hilo: 1 uno
N hilo: 1 dos
N hilo: 1 tres
N hilo: 1 cuatro
N hilo: 1 cinco
N hilo: 1 seis
N hilo: 1 siete
N hilo: 1 ocho
N hilo: 1 nueve
N hilo: 1 diez
N hilo: 2 uno
N hilo: 2 dos
N hilo: 2 tres
N hilo: 2 cuatro
N hilo: 2 cinco
N hilo: 2 seis
N hilo: 2 siete
N hilo: 2 ocho
N hilo: 2 nueve
N hilo: 2 diez
N hilo: 3 uno
N hilo: 3 dos
N hilo: 3 tres
N hilo: 3 cuatro
N hilo: 3 cinco
N hilo: 3 seis
N hilo: 3 siete
N hilo: 3 ocho
N hilo: 3 nueve
N hilo: 3 diez
Lo que tendría que pasar acá sería que pasara "uno" al primer hilo, "dos" al hilo 2, "tres" al hilo 3, "cuatro" al hilo 1, y así sucesivamente...
Ojala me puedan ayudar...
¡¡¡Saludos!!!