0

想象一下,许多线程向pthread_kill一个线程发送信号(可能由创建)。但是线程不能立即部署它们。这些信号会丢失吗?如何解决从其他线程分发的这些信号?有什么参考或经验吗?tks 供您考虑。

4

2 回答 2

1

是的,他们“迷路了”。信号没有排队[1],它们只是一个被设置和清除的标志。因此,在第一个信号之后但在处理信号之前到达的几个信号无效。

解决方案是避免使用 unix 信号进行消息传递(实际上,对于大多数事情),而是使用其他东西,例如在互斥锁和条件变量的帮助下通过内存进行通信。

[1] 有实时信号,可以排队,至少在一定限度内,它们有自己的问题。

于 2012-12-13T16:12:25.380 回答
0

如果信号被发送到特定线程并且它们当前被阻塞,它们将在线程中保持挂起。当它们被解除阻塞(例如通过pthread_sigmask)时,将执行适当的信号动作。

PS。除非它们是排队信号(参见sigqueue),否则是否只是多个信号之一的信息将丢失。

于 2012-12-13T16:09:01.540 回答