gpt4 book ai didi

c++ - 在信号处理程序中使用 SIGRTMIN 和 SIGRTMAX 是否安全?

转载 作者:太空狗 更新时间:2023-10-29 11:46:51 25 4
gpt4 key购买 nike

我正在使用的代码有一个共享信号处理程序,它打开信号编号以适本地处理它。

我正在添加自定义信号。像这样

static void signal_handler (int s)
{
if ( s == SIGTERM ) clean_up () ;

else if ( s == SIGRTMIN+1 ) ; // do nothing
}

SIGRTMINSIGRTMAX 是初始化静态数据的函数调用的#defines(在我在谷歌代码搜索中看到的实现中)

信号处理程序应该是不可重入的。在 SIGRTMINSIGRTMAX 的访问器中使用静态数据是否会使这些宏在信号处理程序中使用不安全?

最佳答案

我不知道你在抽什么实现,但在 libc 中,这些函数大多数时候似乎只是返回一个常量静态变量。

你是对的,两次调用 init() 之间可能存在竞争,但这只是将一个 static int 两次初始化为相同的常量,几乎不用担心。

而且,虽然静态变量并不是真正的常量,但它们告诉您只能在程序开始时修改所述变量(我认为只有 pthread 才真正修改它那么多)。

因此无需担心这些函数(来自 allocrtsig.c glibc 2.14)。

而且,如果您真的担心,只需在绑定(bind)信号处理程序之前调用一次 SIGRTMIN。这将使 init() 函数不受影响。

/* Return number of available real-time signal with highest priority.  */
int __libc_current_sigrtmin (void)
{
#ifdef __SIGRTMIN
if (!initialized)
init ();
#endif
return current_rtmin;
}
libc_hidden_def (__libc_current_sigrtmin)

/* Return number of available real-time signal with lowest priority. */
int __libc_current_sigrtmax (void)
{
#ifdef __SIGRTMIN
if (!initialized)
init ();
#endif
return current_rtmax;
}
libc_hidden_def (__libc_current_sigrtmax)

关于c++ - 在信号处理程序中使用 SIGRTMIN 和 SIGRTMAX 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com