为什么 pthread_mutex_trylock 不是异步信号安全函数?

问题描述 投票:0回答:1

我从阅读这个 github issue 了解到,“旧的 LinuxThreads 库和新的 NPTL 库都以异步信号安全的方式实现了 trylock()”,但“MacOSX”却没有。为什么不或如何不?

pthread_mutex_trylock()
怎么可能不是信号安全的?

例如,如果我只想接收一次信号,然后忽略特定信号的后续信号,我想做类似的事情:

static pthread_mutex_t single_exit_signal_mutex = PTHREAD_MUTEX_INITIALIZER;
static void sig_quit(int sig) //registered for SIGQUIT, SIGTERM, SIGINT
{
    // Only accept one SIGQUIT, SIGTERM, or SIGINT.
    if (pthread_mutex_trylock(&single_exit_signal_mutex) != 0)
        return;
    //...other cleanup code
}

而且这在NPTL库下的Linux中似乎是“安全的”,但为什么在POSIX标准中却没有呢?

c pthreads posix
1个回答
0
投票

有没有另一种方法只处理一次信号?

你可以使用 atomic variable 而不是 mutex.

© www.soinside.com 2019 - 2024. All rights reserved.