Если у меня есть такая программа (в псевдокоде):
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();
}
тогда возникнет взаимоблокировка при попытке получить блокировку в func, в то время как она уже получена от «основного» вызывающего объекта. Мне было интересно, есть ли способ приостановить обработку сигнала на языке C, в частности, когда в этом примере вход в func и получение блокировки, а также возобновление обработки сигнала И вызов обработчиков при выходе из func.