Shared memory & pthread_cond, wiso kommt es zum deadlock?

OP #4841644
Hallo zusammen

Ich habe ein kleines Programm geschrieben, bei welchem mehrere Worker 
Prozesse mittels fork erstellt werden, und ein Unterprozess pro Entry 
point. Ich habe für jeden Worker Prozess einen Ringbuffer in Shared 
Memory erstellt, von welchem die Worker Prozesse den nächsten Task 
holen, und jeder Prozess Tasks hinzufügen kann mittels der Funktion 
worker_queue_task. Aber immer wenn ich diese Aufrufe, hängt sich die 
Funktion bei pthread_cond_broadcast auf. Ich komme einfach nicht 
dahinter, was ich hier falsch mache: 
https://github.com/Daniel-Abrecht/worker/blob/master/src/worker/worker.c
(Firma: Torrox.de)
Hi Daniel,
ich würde mal die Rückgabe aller pthread Funktionen testen, vielleicht 
bringt das einen Hinweis. Ansonsten, bist Du Dir sicher, dass Du die 
condvar und mutex attributes schon vor Ende der Lebenszeit der condvar 
und der mutexe bereits wieder frei geben kannst?

mfg Torsten
OP
Torsten R. schrieb:
> Ansonsten, bist Du Dir sicher, dass Du die condvar und mutex attributes
> schon vor Ende der Lebenszeit der condvar und der mutexe bereits wieder
> frei geben kannst?

Ja, dem Standard zufolge schon.
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_condattr_destroy.html
> After a condition variable attributes object has been used to initialize one or 
more condition
> variables, any function affecting the attributes object (including destruction) 
shall not affect any
> previously initialized condition variables.

Ich werde dann mal die Rückgabewerte prüfen.
OP
Nachdem ich den Code nochmals aufgeraumt, Fehlerbehandlungen 
hinzugefügt, und noch einige mal die Stelle angesehen habe, ist es mir 
irgendwann aufgefallen. Ich hatte die falsche Variable verwendet, 
nähmlich &current_worker->cond statt &w->cond. Wie konnte ich das nur 
übersehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.