gpt4 book ai didi

c - 多个独立的线程处理程序

转载 作者:行者123 更新时间:2023-11-30 15:27:59 29 4
gpt4 key购买 nike

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

主例程调用多个加载。每个负载都有自己的 Controller 。然后, Controller 发送信号以在不同时间暂停和恢复各自的负载。

负载的代码如下所示:

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 */
}
}

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

有人可以告诉我为什么它不起作用吗?经过研究,我发现一个进程(及其所有子进程)一次只能有一个信号处理程序处于事件状态。这是真的吗?

编辑:我尝试重新表述我的主要问题:如何在任意时间暂停/恢复 load_main() 中的 /*calculate some */ 部分我无法修改此部分(“黑匣子”,外部给定的函数)?

非常非常感谢!

最佳答案

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

您可以尝试使用信号量来替换您尝试使用的信号方法。欲了解更多详情,您可以阅读POSIX semaphore man page 。它还提供示例代码供您引用。

关于c - 多个独立的线程处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768192/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com