gpt4 book ai didi

使用定时器处理 C 信号

转载 作者:行者123 更新时间:2023-11-30 15:53:08 31 4
gpt4 key购买 nike

http://codepad.org/rHIKj7Cd (不是全部代码)

我想要完成的任务是, parent 在共享内存中写入一些内容,然后 child 做出相应的 react ,并每五秒写回一些内容。我考虑过使用 SIGUSR1-2,也许可以在处理程序中打开符号,但我不知道如何编写代码,因为 setitimer 会抛出 SIGALRM。我显然不想 fork 处理程序,因为我只需要一个 child 和一个 parent ,那么我如何定义不同的行为?我希望我的目标很明确:

每 5 秒:

  • SIGALRM 由计时器抛出
  • 父级将其计算写入共享内存(正在使用信号量)
  • 子进程从共享内存中读取数据,写回其计算结果

我也知道不建议使用signal(),这不是重点。

最佳答案

计时器信号处理程序应该尽可能少地执行操作,可能只对父进程等待的信号量执行“post”操作。然后父进程开始工作,并依次在子进程等待的信号量上使用“post”。子进程完成其工作并通过另一个“帖子”向父进程发送信号,然后返回等待信号量,父进程可以对子进程的结果执行某些操作。最后父进程返回等待来自定时器信号处理程序的信号量。

当然,进程之间的信号以及从计时器信号处理程序到父进程的信号实际上不一定是信号量。还有其他方法可以在 POSIX 系统中的进程之间进行通信和发送“信号”,包括从管道读取/写入、在共享内存或消息队列中设置特殊位或字节。

关于使用定时器处理 C 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877662/

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