0

http://codepad.org/rHIKj7Cd(不是整个代码)

我想要完成的是父母在共享内存中写一些东西,然后孩子做出相应的反应,然后每五秒钟写回一些东西。我考虑过使用 SIGUSR1-2,并且可能在处理程序中打开 signum,但我不知道如何编写代码,因为 setitimer 会抛出 SIGALRM。我显然不想在处理程序中分叉,因为我只需要一个孩子和一个父母,那么我如何定义不同的行为?我希望我的目标很明确:

每 5 秒:

  • SIGALRM 由定时器抛出
  • 父级将其计算写入共享内存(正在使用信号量)
  • 孩子从共享内存中读取,写回它的计算

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

4

1 回答 1

1

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

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

于 2012-12-14T11:41:51.267 回答