У меня такой вопрос: безопасно ли писать в тип sig_atomic_t в обработчике сигналов, если он является членом структуры.
Рассмотрим пример:
#include <stdio.h>
struct int_seen {
sig_atomic_t usr1;
sig_atomic_t term;
sig_atomic_t client_term;
};
static volatile struct int_seen interrupts;
int main() {
printf("Hello World");
if (interrupts.term){
return 1;
}
return 0;
}
Учитываячто я работаю над многопроцессорным, но однопоточным приложением, безопасно ли для обработчика сигнала записывать в interrupts.term и т. д.
Обратите внимание на особые требования базы кода, над которой я работаю:1008 *
- Должно быть C89-совместимым
- Однопоточный / многопроцессорный
- Должен быть портативным
Я попытался прочитать стандарт C89 и всеЯ вижу, что sig_atomic_t - единственный тип, который я могу использовать, и что он гарантированно будет иметь размер не менее 8 бит.Я не могу понять, является ли использование такого рода безопасным или нет.