C 编程 - 信号处理程序中的信号计数
C Programming - Counting signals in signal handler
我正在研究 C 编程中的信号。我有父进程和 5 个子进程,我试图在子进程完成一些计算时将 SIGUSR2 从子进程发送到父进程,而父进程使用 sigsuspend() 等待它们。当所有 5 个子进程都发送 SIGUSR2 时,父进程继续其工作。为此,我在信号处理函数中增加了一个全局变量。有时它运行良好但有时父进程卡在等待中。
你们中的一个能帮我找到一个更好的解决方法而不是计算接收到的信号(我必须使用信号进行同步)吗?
据我所知,您不能为此使用信号。如果在一个进程被安排处理第一个信号之前将两个相同类型的信号发送到一个进程,它只会看到一个信号。把它想象成一个位掩码,每个未决信号都有一个位,当进程被调度时,它将接收所有信号。但是,如果它正在等待其他进程,并且掩码中的位已设置为信号,则不会再发生任何事情。
更好的解决方案可能是为每个子进程打开一个管道,并且每个子进程在完成后写入一条消息。当 parent 读取了所有 children 的消息后,它可以继续。还有其他同步方法,但这可能是最简单的。
我正在研究 C 编程中的信号。我有父进程和 5 个子进程,我试图在子进程完成一些计算时将 SIGUSR2 从子进程发送到父进程,而父进程使用 sigsuspend() 等待它们。当所有 5 个子进程都发送 SIGUSR2 时,父进程继续其工作。为此,我在信号处理函数中增加了一个全局变量。有时它运行良好但有时父进程卡在等待中。
你们中的一个能帮我找到一个更好的解决方法而不是计算接收到的信号(我必须使用信号进行同步)吗?
据我所知,您不能为此使用信号。如果在一个进程被安排处理第一个信号之前将两个相同类型的信号发送到一个进程,它只会看到一个信号。把它想象成一个位掩码,每个未决信号都有一个位,当进程被调度时,它将接收所有信号。但是,如果它正在等待其他进程,并且掩码中的位已设置为信号,则不会再发生任何事情。
更好的解决方案可能是为每个子进程打开一个管道,并且每个子进程在完成后写入一条消息。当 parent 读取了所有 children 的消息后,它可以继续。还有其他同步方法,但这可能是最简单的。