безопасность записи в член структуры в обработчике сигналов - PullRequest
0 голосов
/ 24 сентября 2018

У меня такой вопрос: безопасно ли писать в тип 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 *

  1. Должно быть C89-совместимым
  2. Однопоточный / многопроцессорный
  3. Должен быть портативным

Я попытался прочитать стандарт C89 и всеЯ вижу, что sig_atomic_t - единственный тип, который я могу использовать, и что он гарантированно будет иметь размер не менее 8 бит.Я не могу понять, является ли использование такого рода безопасным или нет.

...