我需要一个有时间限制的程序。
因此,我使用ALARM()函数在时间限制内退出程序。
但我在同步方面有问题。
在我的程序中有一个临界区,所以如果在临界区内发生超时,那么我想在临界区之后推迟报警。
这样地:
main() {
alarm(5);
...
disable_alarm();
//critical section; program shouldn't exit during this section
{...}
enable_alarm(); //if alarm happens during it's disabled, program must exit here.
...
}
在这种情况下,我应该为
disable_alarm()
和enable_alarm()
使用哪个函数。 最佳答案
一种方法是安装一个信号处理程序。
类似于以下伪代码:
收到内部警报;
我的处理器(int sig){
收到的警报=1;
}
无效禁用报警(无效)
{
收到报警=0;
信号(SIGALRM,我的处理器);
}
无效(启用报警(无效))
{
如果(收到警报)
退出(1);
信号(SIGALRM,SIG-DFL);
}
您可能应该使用sigaction()而不是signal(),因为这是一个很好的习惯。
或者,sigprocmask()可能是您正在寻找的解决方案,具体取决于阻塞信号的含义。如果阻塞的信号保持挂起状态,则在取消屏蔽时会传递abd,sigprocmask()是解决问题的更简单的方法。
关于linux - 在Linux中用C阻止alarm(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16493224/