...
fork()-kutsun jälkeen ei voi olla varma siitä kumpi prosessi (äiti vai lapsi) jatkaa aiemmin suoritustaan. Jos järjestys tärkeää, on ohjelmoitava itse synkronointi
Esim 1.
Code Block |
---|
#include < sys/types.h > #include < unistd.h > int glob = 6; char buf[] = "teksti stdout virtaan\n"; int main(void) { int var; /* automatic variable on the stack */=88; pid_t pid; var = 88; if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1) perror("write errorkirjoitusvirhe"); printf("beforeennen fork-funktiota\n"); /* we don't flush stdout */ if ( (pid = fork()) < 0) perror("fork errorvirhe"); else if (pid == 0) { /* childlapsiprosessi */ glob++; /* modifymodifioidaan variablesmuutujia */ var++; } else sleep(2); /* parentvanhempi */ printf("pid=%d,glob=%d,var=%d\n",getpid(), glob, var); exit(0); } |
...