2013-03-20 89 views
0

我写了两个使用SIGIO执行IPC的守护进程。然而,在重要的行动正在完成时,控制权有时会转移到signal_handler上,这可能被认为是原子性的行为。有没有办法让我指定,直到循环的当前迭代完成为止,我们不会将控制转移到signal_handler函数异步通知管理

在此先感谢 d

注意:我使用的是Linux

回答

0

我不知道是否有任何更好的方法来做到这一点,但我做了以下内容:

我设置一个全局变量sigio_rec在一个函数sigio_handler中为true,sigio_handler是我注册到sigaction()的函数,在引发SIGIO时被调用。 在每个循环结束时,程序检查sigio_rec是否为真,如果是,则从套接字检索数据并继续。

--ttfn

+0

我设法找到更好的方式来做到这一点,我注意到,在使用的时候一个SIGIO是rasied异步通知,我的机理上述结果的信号竞争条件引起的。我真正需要做的就是阻止SIGIO,这可以用sigprocmask来执行 - 代码现在可以安全运行。 – user1658296 2013-03-26 20:41:15