Shared memory & pthread_cond, wiso kommt es zum deadlock?

OP #4841644
Lesenswert?

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
OP #4842130
Lesenswert?

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 #4842188
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren