gpt4 book ai didi

c - 用信号停止一段时间(真)

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:46 27 4
gpt4 key购买 nike

我正在使用 c 语言进行并发处理,我有一个进程池。为此,我让每个 child 都在一个 While (True) 循环中。为了杀死 child ,我正在使用一个全局变量和一个信号处理程序来修改它来打破循环。

问题是, children 使用分配的内存,我想释放它。因此,使用来自父级的简单 SIGTERM 是行不通的。

全局:

int sigusr1_count = 0;

void SenalTerminacion() {
++sigusr1_count;
}

signal(SIGUSR1, SenalTerminacion);

child :

While (1) {
if (sigusr1_count != 0) {
break;
}
/* some calculations */
}
print("Hola Stack Overflow\n");
/* freeing memory */
exit(0);

父亲:

kill(pidChild, SIGUSR1);
wait(NULL);

如果我用 wait 注释掉该行,代码将起作用并显示消息。但如果我离开等待程序挂起。我可以想象 child 是不是因为我不知道信号和等待的奇怪东西而没有结束。我有 n 个 child 。先感谢您!

最佳答案

sigusr1_count 可能由您的子/父进程缓存(在寄存器文件中——编译器执行此操作),而不是从内存中读取(或在子进程中完全编译为不变)。将其标记为 volatile 以防止两者:

volatile int sigusr1_count=0;

更好:考虑使用信号量进行进程间信号而不是繁忙的 while(1) 循环。

关于c - 用信号停止一段时间(真),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951364/

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