Font
[thread]8005[/thread]

globale $vars in Thread bearbeiten



<< >> 3 entries, 1 page
pearl-man
 2006-05-22 14:13
#66408 #66408
User since
2005-07-25
65 articles
BenutzerIn
[default_avatar]
Tach(h),

hab n Problem, wenn ich im Main-Part ne Variable festleget mit strict vars:

Code: (dl )
1
2
3
4
5
6
#!/usr/bin/perl -w

use strict;
use Thread;

my $var = 10;


und mit detach() nen Thread starte, welcher diese Variable $var verändert, also:

Code: (dl )
1
2
3
4
5
6
7
8
9
my $t = new Thread \&mach_was;
$t->detach();

sub mach_was
{
foreach (1 .. 5){
$var--;
}
}


so wird die Variable $var einfach nicht verändert, sie entspricht also bei späterer Ausgabe mit z.B.:

Code: (dl )
1
2
3
4
sleep(10);
print "For now the var looks like: $var";

exit(0);


nicht dem erwartetem Ergebniss von 5 sondern es wird nach wie vor die Zahl 10 ausgegeben. Leserechte besitzt die sub 'mach_was' des Threads $t jedoch bezüglich von $var, doch scheinbar keine globalen Schreibrechte.

habs auch schon mit Package-Variablen versucht, also:

Code: (dl )
my $var = 10;


durch

Code: (dl )
$main::var = 10;


ersetzt und die Variable $var jeweils mit $main::var verwendet, doch ohne Erfolg.
Jemand n Tipp?
nepos
 2006-05-22 14:21
#66409 #66409
User since
2005-08-17
1420 articles
BenutzerIn
[Homepage] [default_avatar]
Ich glaube, du musst die Variable zwischen den Threads sharen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
    use threads;
    use threads::shared;

    my $foo : shared = 1;
    my $bar = 1;
    threads->new(sub { $foo++; $bar++ })->join;

    print "$foo\n";  #prints 2 since $foo is shared
    print "$bar\n";  #prints 1 since $bar is not shared


Siehe auch "Shared And Unshared Data" in Perl Thread Tutorial
pearl-man
 2006-05-22 14:33
#66410 #66410
User since
2005-07-25
65 articles
BenutzerIn
[default_avatar]
Vielen dank, daran hats gelegen, sollte mir die perldocs wohl mal mehr zu gemühte führen!
<< >> 3 entries, 1 page



View all threads created 2006-05-22 14:13.