如何使用户自定义信号 SIGRTMIN 独一无二?

how to make user custom signal SIGRTMIN unique?

我正在编写一个库,需要向线程发送自定义信号,我使用了 signal(SIGRTMIN, handler); 并且一切正常。

因为这是一个库,我担心一些使用我的库的人也会使用这个 SIGRTMIN,所以这个 linux/posix_thread 有什么办法可以得到一个唯一的 SIGRTMIN id?

目前我解决这个问题的方法是添加一个幻数,比如SIGRTMIN + MAGIC_NUMBER来减少重复信号的变化,但我想知道是否有更好的解决方案。

没有可行的方法以编程方式识别未使用的信号编号。图书馆使用的固定信号编号应被视为其 API 的一部分,由图书馆客户端来避免冲突。

但是,应该可以建立一种机制,使库客户端可以在运行时向库注册其选择的信号编号。这可以是绝对数字的形式,也可以是 SIGRTMIN 的偏移量。客户端应该调用函数来指定信号编号,库可以注册处理程序来侦听调用者指定的信号。

另外请注意,在注册信号处理程序时,您应该始终更喜欢 sigaction() 而不是 signal()。后者行为的几个重要细节没有明确定义,并且因实现而异,但 sigaction() 允许程序员指定所有相关细节。