Ik ben bezig met een perl programma wat met threads werkt.
Een thread moet kunnen schrijven in een lijstje in de mainthread, en andere threads moeten deze waarden ook weer kunnen lezen.
Nu is het punt dat als je in een thread iets wijzigt, dan is dat binnen die thread wel gewijzigd, maar voor de andere threads niet.
En dat geeft de output:
Terwijl dat zou moeten zijn:
Of te wel het werkt niet
.
Ik heb van alles geprobeerd met het veranderen van references e.d., maar dat mocht niet baten.
Heeft iemand hier een oplossing voor?
Een thread moet kunnen schrijven in een lijstje in de mainthread, en andere threads moeten deze waarden ook weer kunnen lezen.
Nu is het punt dat als je in een thread iets wijzigt, dan is dat binnen die thread wel gewijzigd, maar voor de andere threads niet.
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| #!/usr/bin/perl -w # Basis use strict; use warnings; use Thread; # lijst met clients our %clients; $clients{ "client_1" } = "init"; my $thrd = new Thread( \&process_request, \%clients, "client_1" ); $thrd->join(); # wachten $thrd = new Thread( \&process_request, \%clients, "client_1" ); $thrd->join(); # process sub process_request { # args my $clientlist = shift; my $id = shift; logw( "Started thread" ); logw( $$clientlist{ $id } ); lock( $$clientlist{ $id } ); { $$clientlist{ $id } = "wijzig"; } logw( $$clientlist{ $id } ); logw( "Exitting thread" ); } sub logw { my $message = shift; print $message ."\n"; } |
En dat geeft de output:
Text output:
1
2
3
4
5
6
7
8
| Started thread init wijzig Exitting thread Started thread init wijzig Exitting thread |
Terwijl dat zou moeten zijn:
Text output:
1
2
3
4
5
6
7
8
| Started thread init wijzig Exitting thread Started thread wijzig wijzig Exitting thread |
Of te wel het werkt niet
Ik heb van alles geprobeerd met het veranderen van references e.d., maar dat mocht niet baten.
Heeft iemand hier een oplossing voor?