线程的多个独立处理程序

时间:2014-11-05 22:16:02

标签: c multithreading signals

我在C中遇到了多个线程和信号处理程序的问题:

主程序调用多个负载。每个负载都有自己的控制器。然后控制器发送信号暂停并在不同时间恢复到各自的负载。

负载的代码如下所示:

static void signal_handler(int signo) {
  /* When signal PAUSE received, get into loop until RESUME arrives */
  while (signo != SIGNAL_RESUME) {
    /* While in the loop, the main routine gets paused */
    sigwait(signalsBetweenControllerandLoad, &signo);
  }
}

int load_main() {
  signal(SIGNAL_PAUSE, signal_handler);
  signal(SIGNAL_RESUME, signal_handler);
  while(1) {
    /*calculating something */
  }
}

只使用一个加载时代码有效。但是当多个负载运行时,它们有时会开始干扰。如果他们这样做,程序就会在执行时冻结。但有时代码会按预期完成。负载越少,程序按预期工作的可能性就越大。

有人可以告诉我为什么它不起作用?在研究中,我发现一个进程(以及它的所有子进程)一次只能激活一个信号处理程序。这是真的吗?

编辑:我尝试重新制定我的主要问题:当我无法修改此部分时,我如何在任意时间暂停/恢复/*calculating something */中的load_main()部分("黑匣子&# 34;,外部给定功能)?

非常非常感谢你!

1 个答案:

答案 0 :(得分:1)

signal's man page开始,它提到信号是按进程属性。因此在多线程程序中,所有线程的信号处理程序都是相同的。

您可以尝试使用信号量来替换您尝试使用的信号方法。有关更多详细信息,请阅读POSIX semaphore man page。它还有示例代码供您参考。