также признайте, что качественные реализации должны пытаться поддерживать функции, которые некоторые неясные системы не могут.
спользованиеsem_post () в обработчике сигнала полагаться на неопределенное поведение?
/*
* 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);
}
}
Семафорсемафор имеет статическую продолжительность хранения. Пока призыв кsem_post() безопасен при асинхронном сигнале,POSIX.1-2008 лечение сигнальных действий кажется, запрещает ссылаться на этот семафор:
[T] его поведение не определено, если обработчик сигнала ссылается на любой объект, кромеERRNO со статической продолжительностью хранения, отличной от присвоения значения объекту, объявленному какvolatile sig_atomic_tили если обработчик сигнала вызывает любую функцию, определенную в этом стандарте, кроме одной из [явно асинхронно-безопасных функций].