Si j'ai un programme comme celui-ci (en pseudocode):Y at-il un moyen d'assurer l'atomicité tout en ayant un programme multithread avec des gestionnaires de signaux?
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();
}
alors il y aurait une impasse lors de la tentative d'acquérir le verrou Func, alors qu'il est déjà acquis de l'appelant « principal ». Je me demandais s'il y avait un moyen de suspendre la gestion du signal dans le langage C, spécifiquement, quand, dans cet exemple, entrer func et acquérir le verrou, et reprendre la gestion du signal ET appeler les gestionnaires à la sortie func.
L'interaction entre les threads et la gestion des signaux dans C lui-même n'est pas définie. Tu dois être plus précis. Votre système est-il un système POSIX? Veuillez marquer votre question en conséquence. –