Являются ли std :: signal и std :: Повышение безопасности потока?
Стандарты C и C ++ поддерживают концепцию сигнала. Тем не менее, стандарт C11 говорит, что функция signal () не может быть вызвана в многопоточных средах, или поведение не определено. Но я думаю, что механизм сигналов по своей природе для многопоточных сред.
Цитата из стандарта C11 7.14.1.1.7 "
Использование этой функции в многопоточной программе приводит к неопределенному поведению. Реализация должна вести себя так, как будто ни одна библиотечная функция не вызывает функцию сигнала. "
Любые объяснения по этому поводу?
Следующий код очевиден.
#include
#include
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();
}