Thread Mehrere Prozesse für Dual/Quad Core (6 answers)
Opened by Snicker at 2008-09-05 21:24

pq
 2008-09-05 21:49
#114306 #114306
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also was mir gleich auffällt:
du machst nicht direkt nach dem fork eine abfrage, ob du im child bist oder nicht.
der gesamte code nach dem fork wird also zweimal ausgeführt, vom parent und child.
ausserdem wird sogar die schleife vom child ausgeführt.
desweiteren erstellst du $k1 erst in der schleife, nach dem fork.
du musst sie im parent und ausserhalb der schleife setzen.
üblicherweise schreibt man ein fork so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my $pid = fork();
unless (defined $pid) {
    die "Could not fork $!";
}
elsif (!$pid) [
    # child
    exit;
}
else {
    # parent, inkrementiere $k1 etc.
}


zur demonstration mit der schleife:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
perl -wle'
for (1 .. 2) {print "($$) start of loop $_";
my $pid = fork;
print "($$) ($pid) loop $_";
}'
(5305) start of loop 1
(5305) (5306) loop 1
(5305) start of loop 2
(5306) (0) loop 1
(5306) start of loop 2
(5307) (0) loop 2
(5308) (0) loop 2
(5305) (5307) loop 2
(5306) (5308) loop 2


wie man sieht, wird die schleife drei mal ausgeführt, zweimal vom parent und einmal vom child.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Mehrere Prozesse für Dual/Quad Core