日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux的基础知识——时序竞态

發布時間:2024/7/19 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的基础知识——时序竞态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。