C Threads, Wieso nur mit sleep?

Gast #3218279
Lesenswert?
• ▲
▼
Hallo zusammen,
ich versuche mich gerade an Threads und habe ein eigentlich einfaches 
Programm geschrieben, welches zwei Threads erzeugt, einer schreibt 10 
Werte in ein Array, der andere ließt sie aus. Geschützt wird mit Mutexes 
und "zwischen schreiben und lesen umgeschaltet" wird mit Conditions.
Das ganze funktioniert soweit auch, aber nur, wenn ich in Zeile 81 das 
sleep(1) drin lasse, sonst nicht. Hat jemand eine Idee, wieso?

Lg fex
Angehängte Dateien:
Lesenswert?
• ▲
▼
Aus der man-Page:

> pthread_cond_signal restarts one of the threads that are waiting on the
> condition variable cond. If no threads are waiting on cond, nothing
> happens. If several threads are waiting on cond, exactly one is restarted,
> but it is not specified which.

Ohne das sleep() wirst du das pthread_cond_signal() ausführen, bevor der 
"schreiben" Thread zur Ausführung kommt und auf die Condition Variable 
warten kann. Und dann passiert nichts.
Gast
Lesenswert?
• ▲
▼
mein debian-linux hat immernoch ein timing-problem mit Deinem Programm. 
Manchmal läuft es ganz durch aber häufig so:
1
./a.out
2
pause_read 
3
pause_write 
4
MAIN: thread creation done, sending signal: schreiben_moeglich
5
run_write 
6
sending signal: lesen_moeglich
7
run_read 
8
  1   2   3   4   5   6   7   8   9  10 sending signal: schreiben_moeglich
9
pause_write 
10

11
pause_read
(mein debug-code im Anhang)

Man sieht das das signal schreiben_moeglich kommt noch bevor es bei 
pause_write in die pthread_cond_wait Wartefunktion springt, die das 
somit nicht empfängt, weil das signal zu früh kommt bzw. weil es zu dem 
Zeitpunkt noch keinen schlafenden thread gibt, den man wecken könnte...

ich kenn mich mit pthreads nicht aus, weis also keine Lösung außer 
globale Variablen, die irgendwie vorher prüfen ob ein thread pennt 
oderso, aber das ist wohl eher nicht im Sinne von pthreads außerdem 
könnte ja das signal kommen genau in dem moment, wo ich die variable 
"thread pennt" gesetzt habe aber noch nen millisekundentick bevor der im 
nächsten Schritt wirklich in das wait gesprungen ist...
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.