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