sem_post, manejadores de señal y comportamiento indefinido
¿Este uso desem_post () en un controlador de señal confía en un comportamiento indefinido?
/*
* excerpted from the 2017-09-15 Linux man page for sem_wait(3)
* http://man7.org/linux/man-pages/man3/sem_wait.3.html
*/
...
sem_t sem;
...
static void
handler(int sig)
{
write(STDOUT_FILENO, "sem_post() from handler\n", 24);
if (sem_post(&sem) == -1) {
write(STDERR_FILENO, "sem_post() failed\n", 18);
_exit(EXIT_FAILURE);
}
}
El semáforosem tiene duración de almacenamiento estático. Mientras la llamada asem_post() es asíncrono seguro para la señal, elPOSIX.1-2008 tratamiento de acciones de señal parece no permitir hacer referencia a ese semáforo en sí:
[E] l comportamiento no está definido si el controlador de señal se refiere a cualquier objeto que no seaerrno con una duración de almacenamiento estático que no sea mediante la asignación de un valor a un objeto declarado comovolátil sig_atomic_t, o si el manejador de señal llama a cualquier función definida en este estándar que no sea una de las [funciones explícitamente asíncronas seguras].