linux的基础知识——时序竞态
生活随笔
收集整理的這篇文章主要介紹了
linux的基础知识——时序竞态
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1.pause函數(shù)
- 1.1 pause函數(shù)例子
- 2.時(shí)序問題
- 3.解決時(shí)序問題
- 4.例子:sigsuspend函數(shù)的舉例
- 5.總結(jié)
1.pause函數(shù)
1.1 pause函數(shù)例子
\qquad程序依次從1到無窮輸出數(shù)字,當(dāng)遇到100的整數(shù)倍時(shí)就暫停,鍵盤輸入ctrl+c,就繼續(xù)輸出。
#include<stdio.h> #include<signal.h> #include<unistd.h>void docatch(int signo) {printf("信號(hào)已被捕捉\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.時(shí)序問題
3.解決時(shí)序問題
4.例子:sigsuspend函數(shù)的舉例
\qquad使用alarm函數(shù)和sigsuspend函數(shù)實(shí)現(xiàn)sleep函數(shù)功能
#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.總結(jié)
總結(jié)
以上是生活随笔為你收集整理的linux的基础知识——时序竞态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络——链路层之停止等待协议
- 下一篇: 【计算机网络复习 物理层】2.1.1