Moin,
Ist sowas von dem Kaliber OK oder muss/sollte ich da noch irgendwie zwischen den beiden Aufrufen warten (bis der andere Prozess, der da evtl. in einem sem_wait() rumduempelt, das wirklich verinnerlicht hat)?
1 |
|
2 |
|
Gruss WK
|
Anzeige
|
Linux: C: SemaphoregedoensMoin, Ist sowas von dem Kaliber OK oder muss/sollte ich da noch irgendwie zwischen den beiden Aufrufen warten (bis der andere Prozess, der da evtl. in einem sem_wait() rumduempelt, das wirklich verinnerlicht hat)?
Gruss WK Wenn überhaupt sem_destroy() verwendet werden muss, weshalb nicht im darauf wartenden Thread? Es fehlt zwar in der Frage jede Menge Kontext, aber trotzdem könnte das hier hilfreich sein: https://stackoverflow.com/questions/77682605/how-to-use-sem-destroy-safely Oliver Moin, Hab' derweilen mal in die glibc-sourcen geguckt und danach sieht's in dem Fall (glibc-2.40) so aus, als wuerden die 2 Zeilen in meinem ersten Post keine Probleme machen, denn in nptl/sem_destroy.c steht sowas:
Natuerlich gilt das nur fuer diesen Fall und diese glibc. Gruss WK Na dann ;) Oliver Leider beantwortet das die gestellte Frage überhaupt nicht. Oliver Ich denk schon. Da steht eindeutig die Anforderung, dass niemand mehr auf den Semaphor warten darf. Ohne Kontext würde ich mal davon ausgehen, dass das bei dem von dir gezeigten Codeschnipsel nicht gewährleistet ist. Moin,
Die man-page hatte ich vorher schon gelesen, hat mich aber eher nicht schlauer gemacht. Ich hab' da halt einfach so ausm Bauch raus gestutzt mit den 2 Aufrufen so direkt hintereinander. Die Frage ist/war, ob sicher ist, dass in dem Moment, wo sem_post() zurueckkehrt, auch der (max. 1) Prozess, der dadurch evtl. aus seinem sem_wait() aufgeweckt wurde, nicht mehr auf den Semaphor zugreift. Klar, wenn da noch mehrere anstehen, bzw. nochmal sem_wait() aufgerufen werden sollte, dann rumpelts im Karton. Ist klar.
Kontext ist da schwierig - ich guck' mir da halt den Code an, und wenn ich bei irgendwas mal stutzig werde, dann guck' ich halt nochmal genauer hin. In dem Fall hier ist's eigentlich fuer mich an der Stelle schon gut. Nur guck' ich eher ungern immer gleich in den src der glibc, das ufert sonst oft mal arg aus :-) Gruss WK
Ich würde es, wenn schon, dann in dem aufgeweckten Thread entfernen. Wenn der wieder läuft, ist es sicher, dass keiner mehr drauf wartet. Ich würde es so machen, wie im oben verlinkten stackoverflow Beitrag. Die Semaphore erst dann abräumen, wenn sicher ist, dass alle drauf zugreifenden Threads nicht mehr laufen. Was natürlich in Anbetracht von Beitrag "Re: Linux: C: Semaphoregedoens" völlig übertrieben wäre. Oliver
Schrieb ich ja oben schon. Ist die einzig saubere Lösung meiner Meinung nach. Wenn’s denn nur einen Thread gibt. Oliver Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|