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
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
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.
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 ¤t_worker->cond statt &w->cond. Wie konnte ich das nur übersehen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.