pthreads join und sleep
-
Hallo
Ich befasse mich gerade mit POSIX-Threads und ich hab da ein kleines Stück Code, dass ich übersetzen konnte und ich hab mich dabei gewundert, warum in der schreibe()- Methode durch den Aufruf von sleep(1) nicht die 1 Sek. gewartet wird. Nur die Ausgabe in der lese()-Methode erfolgt innerhalb der Schleife um 1 Sek. verzögert.
Könnt ihr mir erklären, warum das so ist?
Ich mein es werden ja noch keine Mutexes benutzt und somit müsste das Programm ja trotzdem erst nach 2 mal 10 Sekunden terminieren, da auf beide Threads per join gewartet wird.
Desweiteren bin ich da nun doch ziemlich verwirrt, warum selbst printf-Ausgaben da nur einmal in der Schleife gemacht werden und nicht 10 mal.
Ach ja und warum ist das Ergebnis von data am Ende 10??? Die Bedingung für die Schleife lautet doch k < 10 und sollte doch demnach abbrechen und die Variable k maximal bis 9 zählen oder?Vielen dank schonmal.
#include <pthread.h> #include <stdio.h> #include <stdlib.h> static int data; pthread_mutex_t mutex_a = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_b = PTHREAD_MUTEX_INITIALIZER; void *lese(void *arg); void *schreibe(void *arg); int main(void) { pthread_t thread1, thread2; pthread_create(&thread1,NULL,schreibe,NULL); pthread_create(&thread2,NULL,lese,NULL); pthread_join(thread1,NULL); pthread_join(thread2,NULL); exit(0); } void *lese(void *arg) { int i; for(i = 0; i < 10; i++); { printf("Data = %d\n",data); sleep(1); } return NULL; } void *schreibe(void *arg) { int k; for(k = 0; k < 10; k++); { printf("schreibe Data = %d, k %d\n",data,k); data = k; sleep(1); } return NULL; }
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du erstellst zwei Threads, die arbeiten dann parallel.
Deine for-Schleifen haben keinen Rumpf, wegen dem Semikolon hinter dem "for(...)".
-
Ah sowas dummes. Das mit den Semikolon hatte ich immer und immer wieder übersehen.
Vielen vielen Dank für deine Hilfe. Jetzt erzeugt das Programm auch die Ausgaben so wie ich es erwartet habe und das Programm terminiert nach der richtigen Zeit und die Ausgaben sind nicht deterministisch.