Thread programmierung in c

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Thread programmierung in c

    Hallo C Freunde !

    Ich schreibe gerade an einem Programm welches 2 Threads erzeugt ein Thread erzeugt beliebige Zahlen der zweit Thread gibt das ganze auf der Konsole aus...
    Nun das ganz funktioniert auch wunderbar jetzt möchte ich allerdings das sich der Thread zur ausgabe der Zahlen selbst beendet wenn er eine 0 übergeben bekommt
    dies soll er dem Thread der die Zahlen erstellt mitteilen worauf sich dieser Thread auch beendet.

    So nun die Frage wie kann ich das am besten implementieren ? brauch ich da wieder so etwas wie eine buffer in den Thread 2 reinschreibt.
    ungefähr so :

    Quellcode

    1. int buf; // buffer für thread2
    2. int buf2; // buffer für thread1 in dem die erzeugten zahlen zur Ausgabe bereit stehen
    3. /*Thread1 erzeugt zufallszahlen und schreibt sie in buf2*/
    4. void* rand (void* arg)
    5. {
    6. if(buf == 1)
    7. {
    8. pthread_exit((void*)0);
    9. }
    10. // do something
    11. }
    12. /*print liest aus buf2 und gibt die zahlen auf konsole aus*/
    13. void* print(void* arg)
    14. {
    15. if(buf2 == 0)
    16. {
    17. buf = 1;
    18. printf("ich beende mich selbst ");
    19. pthread_exit((void*) 0);
    20. }
    21. // do something
    22. }
    Alles anzeigen



    oder gibt es noch eine andere möglichkeit Thread1 zu benachrichtigen eventuell über den Rückgabewert mit pthread_exit() ?

    ps.: ich hab mit absicht auf synchro und main usw verzichtet da es nichts mit meiner frage zu tun hat nur das sich niemand wundert ;)

    habe beim googeln leider nichts brauchbares gefunden wäre für jede Hilfe dankbar

    Danke im vorraus
  • the_old_Pirate schrieb:


    ps.: ich hab mit absicht auf synchro und main usw verzichtet da es nichts mit meiner frage zu tun hat nur das sich niemand wundert ;)

    Ja, das ist es doch was du dafür brauchst, das ist die sauberste Methode!

    Generel ist der Zugriff auf Variablen eines anderen Threads nicht zu empfehlen, sowie man globale Variablen vermeiden sollte.

    Da man dennoch mit Thread ab und zu kommunizieren muss gibt es Mutexe, die den Zugriff auf eine Variable explitziet nur einem Thread gleichzeitig ermöglichen.
    Eine evtl. gute Idee wäre es über das Argument der Threadfunktion eine gemeinsame Variable zu übergeben und auf diese, als Status bzw. Mitteilung für den anderen, mit den oben genannten Mutexe zu zugreifen.

    Ansonsten gibt es noch die Möglichkeit mit condition variables zu Arbeiten, da ich jedoch mit Linux nicht so auskenne kann ich dir dazu nicht mehr sagen.

    Siehe auch:
    ijon.de/comp/tutorials/threads/synchro.html
    yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

    Mfg Rushh0ur
  • Hallo Rush!

    Danke für deine Antwort... deine Links sind sehr hilfreich danke dafür allerdings nicht im moment das Mutexe wichtig sind ist richtig.

    Allerdings ist es laut Aufgabe verboten Mutexe einzusetzen oder Condition variablen das ganze soll mit aktivem Warten realiesiert werden sprich die Threads fragen ständig einen Zustand ab und warten darauf das sie am zug sind...
    Dies funktioniert auch deshalb habe ich es dreister weise weggelassen ;)

    Mein problem ist einfach nur das ich eben nicht weiß ob ich jetzt nochmals einen buffer brauche (der buffer für die zuffalszahlen wurde übrigens auch vorgegeben) oder ob es eventuell eine funktion gibt deren hilfe ich das bewerkstelligen kann allerdings fällt mir da auch nur pthread_exit() ein welches ich aber nur in der main abfangen kann von daher macht das nicht viel sinn.