HO un problema con i thread
io mi creo due thread, uno legge da una socket, l'altro fa dei controlli sul tempo.
Entrambi i processi devono settare una variabile comune, nel mio caso si chiama "$pusa".
il problema è che ognuno sembra si legga la sua, io vorrei invece condividerla, ho letto che si dovrebbe usare shared, ma non funziona.
Qualcuno ha esperienza in questa cosa?
#!/usr/bin/perl -w
use IO::Socket;
use Time::CTime;
use threads;
my $pusa : shared = time;
my $sock : shared = new IO::Socket::INET(
PeerAddr => '10.220.20.122',
PeerPort => '5003',
Proto => 'tcp',
)
or die "Impossibile creare il socket: $!\n" unless $sock;;
sub tempo2 {
my ($pusa) = shift;
my $t = time;
my $op = $t - $pusa;
print "tempo2; $t - MODIFICA:$pusa = $op\n";
return $op;
}
sub setPusa {
lock($pusa);
$pusa = time;
}
sub gestioneParallela {
print "--------->Thred Parallela\n";
$intervallo=0;
$loop=1;
while($loop == 1){
$intervallo = &tempo2($pusa);
print "--------->Thred Parallela: intervallo = $intervallo\n";
if($intervallo > 10){
print "--------->Thred Parallela: INVIO CARATTERE\n";
&setPusa;
#lock $sock;
#print $sock "prova";
#lock $pusa;
}
sleep(6);
}
}
sub socketRead {
print "--------->Thred socket\n";
while (<$sock>){
&setPusa;
print "--------->Thred socket: $_ MODIFICA:$pusa\n";
}
print "\nSocket down porta 5003\n";
}
# Creazione dei thread
my $a : shared = 2;
my $thr2 = threads->new(\&gestioneParallela);
my $thr1 = threads->new(\&socketRead);
$thr1->join;
$thr2->join;
print "$a\n";
close($sock);