Ich muss wissen, wie man eine Wettlaufsituation vermeidet, wenn Signale in C behandelt werden. Jedes Mal, wenn mein Programm ein Signal empfängt, möchte ich, dass es eine (globale) verkettete Liste ändert. Es ist äußerst wichtig, dass ich kein Signal verpasse, und ebenso wichtig ist es, dass die globale verkettete Liste, die ich ändere, während der Handler ausgeführt wird, nicht verändert wird.
Das Problem ist, wenn ich ein Signal empfange und den Handler starte, aber dann von einem anderen Signal unterbrochen werde. Dies (wie ich es verstehe) löst eine neue Ausführung des Signalhandlers aus, der auf denselben globalen Datensatz wirkt - nicht zulässig!
Ich kann kein Schloss verwenden, denn wenn der erste Aufruf des Handlers unterbrochen wird, wird es natürlich nie das Schloss für den unterbrechenden Handler freigeben, um es aufzunehmen. Also, wie mache ich das? Irgendwelche Ideen?