Threads und Mutex in C

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

  • Threads und Mutex in C

    Hallo C Programmierer !

    Also ich schreibe gerade an einem Programm welches das Erzeuger Verbraucher Problem simulieren soll. Also sprich es werden durch einen Thread Zufallszahlen erstellt und in einem Buffer geschrieben danach durch einen anderen Thread ausgelesen das ganze habe ich letzte woche schonmal gepostet da war das ganze allerding nocht mit aktivem warten nun wird das ganze mit Mutex realisiert hier mal der link zum alten post: Thread programmierung in c

    so und hier der neue code

    Quellcode

    1. int buff;
    2. int z, ret, ret2;
    3. pthread_mutex_t mutex;
    4. struct timeval begin, end;
    5. long seconds, useconds;
    6. void* zufall (pthread_add arg)
    7. {
    8. while(1)
    9. {
    10. if(pthread_mutex_lock(&mutex)==0)
    11. {
    12. printf("Ich bin der Erzeuger und habe zugriff auf den Buffer\n");
    13. z=rand()%19;
    14. buff=z;
    15. printf("ich bin Thread1 und habe folgendes übergenben %i\n", z);
    16. }
    17. if(pthread_mutex_unlock(&mutex)==0)
    18. {
    19. printf("Ich bin der Erzeuger und bin fertig\n");
    20. }
    21. }
    22. }
    23. void* verbraucher(pthread_add arg)
    24. {
    25. while(1)
    26. {
    27. if(pthread_mutex_lock(&mutex)==0)
    28. {
    29. printf("Verbraucher 1 hat nun zugriff auf den Buffer\n");
    30. printf("Thread1 hat übergeben %i\n",buff);
    31. }
    32. if(pthread_mutex_unlock(&mutex)==0)
    33. {
    34. printf("Verbraucher1 hat den Buffer freigegeben\n");
    35. }
    36. }
    37. }
    Alles anzeigen

    So meiner Meinung nach scheint hier irgenwo ein Fehler zu sein da ich der Meinung bin die Thrads laufen nicht parallel da zuerst Thread 1 30 Mal seine Ausgabe auf die Konsole schreibt und dann 30 Mal (30 mal ist ehr schätzungsweise möchte das jetzt nicht alles posten ) Thread2 immer wieder die letzte übergebene zahl von Thread 1 ausgibt. Müsste es aber nicht so sein das sich die Threads abweschseln ? also Thread 1 schreibt etwas rein Thread2 liest es wieder aus usw ? Natürlich werden aufgrund des Sheduler ein paar zahlen verloren gehen aber das die Threads auch nach mehrmaligen starten immer wieer in der gleichen reihenfolge nacheinander auf der Konsole ausgeben muss doch ein Fehler sein oder liegt das wirklich an den Sheduler ? die if abfragen die um den mutex gebaut sind sind übrigens nur zu kontrolle um zu sehn wann welcher Thread an der reihe ist.

    Bin für jede hilfe Dankbar

    Mit freundlichen Grüßen
  • Wenn du die Threads startest, passiert dies normalerweise Sequentiell, sprich zuerst der eine und dann der andere.
    Das heist auch dass der eine Thread früher Anfangen kann zu arbeiten.

    Du hast den [wikipedia]Prozess-Scheduler[/wikipedia] gennant, dies weist den Thread eine bestimmte Zeitspanne zu die Sie arbeiten.
    Und diese Spanne ist halt so groß das deine while-Schleife sogar mehrmals aufgerufen wird hintereinander.

    Müsste es aber nicht so sein das sich die Threads abweschseln ? also Thread 1 schreibt etwas rein Thread2 liest es wieder aus usw ?

    Wenn du das erreichen willst musst du halt mit Listen arbeiten oder die Threads besser Synchronisieren zB mit dem nem Statusflag (Daten zum verarbeiten da ja/nein).

    Mfg Rushh0ur