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();
}