【问题标题】:can a thread deploy the signal not immediately?线程不能立即部署信号吗?
【发布时间】:2012-12-01 13:41:18
【问题描述】:

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

【问题讨论】:

  • 对不起,我的意思是,如何存储这些从其他线程分发的信号?
  • 操作系统会注意“存储”它们,如果它符合 POSIX。

标签: c multithreading pthreads multiprocessing threadpool


【解决方案1】:

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

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

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

【讨论】:

  • 我没有在Thread Control Block的结构中找到关于信号的标志。
  • @NickDong,也许这个内核没有实现(POSIX)信号。
【解决方案2】:

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

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

【讨论】:

  • 如果一个线程尝试部署信号并运行动作函数,他们是否必须停止当前的顺序任务,或者操作系统会帮助线程部署信号?
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多