linux的基础知识——时序竞态
生活随笔
收集整理的這篇文章主要介紹了
linux的基础知识——时序竞态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.pause函數
- 1.1 pause函數例子
- 2.時序問題
- 3.解決時序問題
- 4.例子:sigsuspend函數的舉例
- 5.總結
1.pause函數
1.1 pause函數例子
\qquad程序依次從1到無窮輸出數字,當遇到100的整數倍時就暫停,鍵盤輸入ctrl+c,就繼續輸出。
#include<stdio.h> #include<signal.h> #include<unistd.h>void docatch(int signo) {printf("信號已被捕捉\n"); }int main() {int i;signal(SIGINT,docatch);for(i=0; ;i++){if(i%100==0){pause();}else{printf("%d\n",i);}}return 0; }2.時序問題
3.解決時序問題
4.例子:sigsuspend函數的舉例
\qquad使用alarm函數和sigsuspend函數實現sleep函數功能
#include<stdio.h> #include<stdlib.h> #include<error.h> #include<unistd.h> #include<signal.h>void catch_sigalrm(int signo) {; }unsigned int mysleep(unsigned int seconds) {struct sigaction newact,oldact;sigset_t newmask,oldmask,suspmask;unsigned int unslept;newact.sa_handler = catch_sigalrm;sigemptyset(&newact.sa_mask);newact.sa_flags = 0;sigaction(SIGALRM,&newact,&oldact);sigemptyset(&newmask);sigaddset(&newmask,SIGALRM);sigprocmask(SIG_BLOCK,&newmask,&oldmask);alarm(seconds);suspmask = oldmask;sigdelset(&suspmask,SIGALRM);sigsuspend(&suspmask);unslept = alarm(0);sigaction(SIGALRM,&oldact,NULL);sigprocmask(SIG_SETMASK,&oldmask,NULL);return(unslept); }int main() {int i;for(i=0;i<5;i++){printf("hello\n");mysleep(2);}return 0; }5.總結
總結
以上是生活随笔為你收集整理的linux的基础知识——时序竞态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络——链路层之停止等待协议
- 下一篇: linux 其他常用命令