Состояние гонки в загадке обработчиков сигналов C

Мне нужно знать, как избежать состояния гонки при обработке сигналов в C. Каждый раз, когда моя программа получает сигнал, я хочу, чтобы она изменяла (глобальный) связанный список . Жизненно важно, чтобы я не пропустил сигнал, и не менее важно, чтобы глобальный связанный список, который я изменяю, не изменялся во время выполнения обработчика.

Проблема в том, что если я получаю сигнал и запускаю обработчик, но затем меня прерывает другой сигнал. Это (насколько я понимаю) запускает новое выполнение обработчика сигнала, который будет работать с одним и тем же глобальным набором данных - недопустимо!

Я не могу использовать блокировку, потому что, если вызов первого обработчика будет прерван, он, естественно, никогда не освободит блокировку для прерывания обработчика. Итак, как мне это сделать? Есть идеи?

6
задан Benubird 2 November 2010 в 11:25
поделиться