Мне нужно знать, как избежать состояния гонки при обработке сигналов в C. Каждый раз, когда моя программа получает сигнал, я хочу, чтобы она изменила (глобальный) связанный список. Жизненно важно, чтобы я не пропустил сигнал, и не менее важно, чтобы глобальный связанный список, который я изменяю, не был изменен во время выполнения обработчика.
Проблема в том, что если я получаю сигнал и запускаю обработчик, но затем меня прерывает другой сигнал. Это (насколько я понимаю) запускает новое выполнение обработчика сигнала, который будет работать с тем же глобальным набором данных - недопустимо!
Я не могу использовать блокировку, потому что, если первый вызов обработчика будет прерван, он, естественно, никогда не освободит блокировку, которую обработчик прерывания может получить. Итак, как мне это сделать? Есть идеи?