Frage zur Ausgabe eines Programmcodes
-
Hey, ich hoffe mir kann jemand helfen zu verstehen was bei folgendem Programmcode als Ausgabe erscheint:
#include <stdio.h> #include <unistd.h> int x =0; int main(){ fork(); fork(); fork(); printf("pid=%d x=%d\n", getpid(), x++); }Und zwar hätte ich erwartet das die jeweile PID des Prozesses ausgegeben wird und x halt jeweils hochgezählt wird, oder das bei allen Prozessen x = 1 ist, aber wenn ich das Programm kompiliere ist bei allen Prozessen x = 0. Kann mir jemand helfen das irgendwie zu verstehen ?
-
Bobbi Bob schrieb:
Und zwar hätte ich erwartet das die jeweile PID des Prozesses ausgegeben wird und x halt jeweils hochgezählt wird, oder das bei allen Prozessen x = 1 ist
Also eine "oder"-Erwartung ist schonmal merkwürdig

Die jeweilige PID kommt doch raus. Aber warum erwartest du andere Ausgaben als x=0? fork kopiert den Prozess, nach einem fork hast du also zwei unabhängige Variablen x, eine in jedem der Prozesse. Die sind dann beide 0. Wenn du x in einem Prozess änderst, hat das keine Auswirkungen auf die anderen Prozesse. Und wie und warum sollte überall x=1 herauskommen?
Und drei forks hintereinander machen dir 8 Prozesse. Normalerweise macht es auch Sinn, die Rückgabe von fork zu überprüfen, um zwischen Kind, Elternteil und Fehler zu unterscheiden.
-
man könnte noch darauf hinweisen, dass es in C++ auch standardmittel fürs multithreading gibt, zwecks portabilität...
-
ddavie schrieb:
man könnte noch darauf hinweisen, dass es in C++ auch standardmittel fürs multithreading gibt, zwecks portabilität...
Was hat der gezeigte Code mit Multithreading zu tun?
-
man kann nur raten, was der OP meint. außerdem immerhin mehr als mit C++.
-
Man sollte noch anmerken, dass x++ nicht 1 ergibt, sondern 0, welche weiter an printf (in C++??) gegeben wird. Informiere dich mal über Präfix- und Suffixinkrement- ubd dekrementoperatoren.