Являются ли std :: signal и std :: Повышение безопасности потока?

Стандарты C и C ++ поддерживают концепцию сигнала. Тем не менее, стандарт C11 говорит, что функция signal () не может быть вызвана в многопоточных средах, или поведение не определено. Но я думаю, что механизм сигналов по своей природе для многопоточных сред.

Цитата из стандарта C11 7.14.1.1.7

«Использование этой функции в многопоточной программе приводит к неопределенному поведению. Реализация должна вести себя так, как будто ни одна библиотечная функция не вызывает функцию сигнала».

Любые объяснения по этому поводу?

Следующий код очевиден.

#include <thread>
#include <csignal>

using namespace std;

void SignalHandler(int)
{
    // Which thread context here?
}

void f()
{
    //
    // Running in another thread context.
    //
    raise(SIGINT); // Is this call safe?
}

int main()
{
    //
    // Register the signal handler in main thread context.
    //
    signal(SIGINT, SignalHandler);

    thread(f).join();
}

Ответы на вопрос(4)

Ваш ответ на вопрос