sigsuspend 函式作用詳解

2021-07-02 13:23:50 字數 874 閱讀 2240

看到網上大部分解釋都是抄來抄去的,結果說不清楚,最後還是不理解,於是花了幾個小時研究了下,感覺大體上明白了。希望本文能對你有用處。

1)標頭檔案:#include

2)乙個保護臨界區**的錯誤例項:(sigprocmask()和pause()實現)

#include #include #include void handler(int sig)    //訊號處理函式的實現

int main()

上面例項的問題是:本來期望pause()之後,來sigint訊號,可以結束程式;可是,如果當「取消阻塞」和「pause」之間,正好來了sigint訊號,結果程式因為pause的原因會一直掛起。。。

解決的方式,當然是sigsuspend()函式了。

3)使用sigsuspend()的程式

#include #include #include void handler(int sig)   //訊號處理程式

int main()

sigsuspend的原子操作是:

(1)設定新的mask阻塞當前程序(上面是用wait替換new,即阻塞sigusr1訊號)

(2)收到sigusr1訊號,阻塞,程式繼續掛起;收到其他訊號,恢復原先的mask(即包含sigint訊號的)。

(3)呼叫該程序設定的訊號處理函式(程式中如果先來sigusr1訊號,然後過來sigint訊號,則訊號處理函式會呼叫兩次,列印不同的內容。第一次列印sigint,第二次列印sigusr1,因為sigusr1是前面阻塞的)

(4)待訊號處理函式返回,sigsuspend返回了。(sigsuspend將捕捉訊號和訊號處理函式整合到一起了)

sigsuspend 函式 解釋

sigsuspend函式作用 如果在等待訊號發生時希望去休眠,則使用sigsuspend函式是非常合適的 標頭檔案 include 乙個保護臨界區 的錯誤例項 sigprocmask 和pause 實現 include include include void handler int sig 訊號處...

sigsuspend函式和sigwait函式

include int sigsuspend const sigset t mask sigsuspend函式是等待某個訊號到達,然後呼叫處理函式之後才返回的,否則會處於阻塞等待狀態。unix環境高階程式設計的sleep函式就是通過alarm函式和sigsuspend函式來實現的。但是當我自己寫了乙...

ngx process options函式詳解

ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...