如何使用户自定义信号 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()
允许程序员指定所有相关细节。
我正在编写一个库,需要向线程发送自定义信号,我使用了 signal(SIGRTMIN, handler);
并且一切正常。
因为这是一个库,我担心一些使用我的库的人也会使用这个 SIGRTMIN
,所以这个 linux/posix_thread 有什么办法可以得到一个唯一的 SIGRTMIN id?
目前我解决这个问题的方法是添加一个幻数,比如SIGRTMIN + MAGIC_NUMBER
来减少重复信号的变化,但我想知道是否有更好的解决方案。
没有可行的方法以编程方式识别未使用的信号编号。图书馆使用的固定信号编号应被视为其 API 的一部分,由图书馆客户端来避免冲突。
但是,应该可以建立一种机制,使库客户端可以在运行时向库注册其选择的信号编号。这可以是绝对数字的形式,也可以是 SIGRTMIN
的偏移量。客户端应该调用函数来指定信号编号,库可以注册处理程序来侦听调用者指定的信号。
另外请注意,在注册信号处理程序时,您应该始终更喜欢 sigaction()
而不是 signal()
。后者行为的几个重要细节没有明确定义,并且因实现而异,但 sigaction()
允许程序员指定所有相关细节。