- 论坛徽章:
- 0
|
大家好,最近在看《APUE》书中信号一章中有一个sleep2的源码如下:- #include <setjmp.h>
- #include <signal.h>
- #include <unistd.h>
- static jmp_buf env_alrm;
- static void
- sig_alrm(int signo)
- {
- longjmp(env_alrm, 1);
- }
- unsigned int
- sleep2(unsigned int nsecs)
- {
- if (signal(SIGALRM, sig_alrm) == SIG_ERR)
- return(nsecs);
- if (setjmp(env_alrm) == 0) {
- alarm(nsecs); /* start the timer */
- pause(); /* next caught signal wakes us up */
- }
- return(alarm(0)); /* turn off timer, return unslept time */
- }
复制代码 按照apue书上的解释是说避免了alarm()和pause()间的竞争条件,但是我添加一个main 函数如下:- int main(void)
- {
- while(1)
- {
- sleep2(1);
- printf("sleep 1 seconds!\n");
- }
- return 0;
- }
复制代码 编译运行却只能看见一次打印的字符,why?? |
|