我需要一个有时间限制的程序。
所以,我使用了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 alarm_received; my_handler(int sig) { alarm_received =1; } void disable_alarm(void) { alarm_received = 0; signal(SIGALRM, my_handler); } void (enable_alarm(void)) { if (alarm_received) exit(1); signal(SIGALRM, SIG_DFL); }
您可能应该使用 sigaction() 而不是 signal(),因为这是养成的好习惯。
或者,sigprocmask() 可能是您正在寻找的解决方案,具体取决于阻止信号的确切含义。如果阻塞的信号保持未决状态,abd 在未屏蔽时被传送,sigprocmask() 是解决您的问题的更简单的解决方案。
关于linux - 在 Linux 中用 C 语言阻止 alarm(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493224/