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
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
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
- int buff;
- int z, ret, ret2;
- pthread_mutex_t mutex;
- struct timeval begin, end;
- long seconds, useconds;
- void* zufall (pthread_add arg)
- {
- while(1)
- {
- if(pthread_mutex_lock(&mutex)==0)
- {
- printf("Ich bin der Erzeuger und habe zugriff auf den Buffer\n");
- z=rand()%19;
- buff=z;
- printf("ich bin Thread1 und habe folgendes übergenben %i\n", z);
- }
- if(pthread_mutex_unlock(&mutex)==0)
- {
- printf("Ich bin der Erzeuger und bin fertig\n");
- }
- }
- }
- void* verbraucher(pthread_add arg)
- {
- while(1)
- {
- if(pthread_mutex_lock(&mutex)==0)
- {
- printf("Verbraucher 1 hat nun zugriff auf den Buffer\n");
- printf("Thread1 hat übergeben %i\n",buff);
- }
- if(pthread_mutex_unlock(&mutex)==0)
- {
- printf("Verbraucher1 hat den Buffer freigegeben\n");
- }
- }
- }
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