Wenn ich ein Programm wie diese (in Pseudo-Code):Gibt es eine Möglichkeit, Atomarität sicherzustellen, während ein Multithread-Programm mit Signalhandlern zur Verfügung steht?
mutex_lock;
func() {
lock(mutex_lock);
// Some code (long enough to make a
// race condition if no proper synchronisation
// is available). We also going to call a signal,
// say, SIGINT, through (ctrl-c), while we are in
// the range of locking and unlocking the lock.
unlock(mutex_lock);
}
sig_handler_func(sig) {
// Say, we are handling SIGINT (ctrl-c) signal
// And we need to call func from here too.
if (sig == SIGINT) {
func();
}
}
main() {
// Calling func from main
func();
}
dann gäbe es ein Deadlock bei dem Versuch, das Schloss in func zu erwerben, während es bereits aus dem ‚Haupt‘ Anrufer erworben wird. Ich habe mich gefragt, ob es eine Möglichkeit gibt, die Signalbehandlung in der C-Sprache zu unterbrechen, insbesondere wenn in diesem Beispiel func eingegeben und die Sperre akquiriert wird, und die Signalbehandlung wiederaufgenommen wird und die Handler beim Verlassen der Funktion aufgerufen werden.
Die Interaktion zwischen Threads und Signalverarbeitung in C selbst ist nicht definiert. Sie müssen genauer sein. Ist Ihr System ein POSIX-System? Bitte kennzeichnen Sie Ihre Frage entsprechend. –