Wie zum ausführen von zwei Kind-Prozesse, die gleichzeitig in C?

So, ich bin immer in Nebenläufige Programmierung, aber aus irgendeinem Grund kann ich nicht einmal die basics zu arbeiten. Ich habe eine Datei namens Gabel.c enthält eine Methode main. In dieser Methode main I Gabel zweimal, in die Kind-Prozesse 1 und 2.

In Kind 1, ich drucken Sie das Zeichen 'A' 50-mal.

In Kind 2, ich drucken Sie das Zeichen 'B' 50-mal.

Wenn ich meinem code bekomme ich die Ausgabe AAAAA...AAAABBBBBB....BBBBBB. Aber nie etwas, ABABABABABABAB.... In der Tat, manchmal habe ich sogar BBBBB....BBBBAAAA....AAAAA.

Also warum soll ich dieses Verhalten Auftritt? Vielleicht werde ich darüber völlig falsch.

#include <stdlib.h>
#include <stdio.h>

void my_char(char n) {
    write(1, &n, 1);
}

int main() {
    int status;
    pid_t child1, child2;

    if (!(child1 = fork())) {
        //first childi
        int a;
        for (a = 0; a < 50; a++) {
            my_char('A'); 
        }
        exit(0);
    } else if (!(child2 = fork())) {
        //second child
        int a;
        for (a = 0; a < 50; a++) {
            my_char('B');
        }
        exit(0);
    } else {
        //parent
        wait(&child1);
        wait(&child2);
        my_char('\n');
    }

    return 0;
}   
  • fork ist wahrscheinlich nicht das, was die meisten Leute denken, wenn Sie sagen, "concurrent programming"...
  • Warum? Sorry, ziemlich neu in diesem.
  • fork erstellt eine neue single-threaded-Prozess. "Parallelität" in der Regel bezieht sich auf multithreading innerhalb eines einzigen Prozesses.
  • Ihre Prozesse nichts zu tun, sondern streiten sich um eine Ressource, die Ausgabe-Gerät. Also, wie können Sie gleichzeitig ausgeführt werden?
Schreibe einen Kommentar