¿Son std :: signal y std :: raise son seguros para los hilos?

Los estándares C y C ++ soportan el concepto de señal. Sin embargo, el estándar C11 dice que la señal de función () no se puede llamar en entornos de subprocesos múltiples, o que el comportamiento no está definido. Pero creo que el mecanismo de señal es, por naturaleza, para entornos de subprocesos múltiples.

Una cita del estándar C11 7.14.1.1.7

"El uso de esta función en un programa con múltiples subprocesos produce un comportamiento indefinido. La implementación se comportará como si ninguna función de biblioteca llamara a la función de señal".

¿Alguna explicación sobre esto?

El siguiente código es evidente por sí mismo.

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta