1. 程式人生 > >Linux系統程式設計 —時序競態

Linux系統程式設計 —時序競態

##**時序競態** 什麼是時序競態?將同一個程式執行兩次,正常情況下,前後兩次執行得到的結果應該是一樣的。但由於系統資源競爭的原因,前後兩次執行的結果有可能得到不一樣的結果,這個現象就是**時序競態**。 ##**pause函式** **函式原型:** int pause(void); **函式作用:** 程序呼叫pause函式時,會造成程序主動掛起(處於阻塞狀態,並主動放棄CPU),並且等待訊號將其喚醒。 **返回值:** 我們知道,訊號的處理方式有三種:1. 預設動作;2. 忽略處理;3. 捕捉。程序收到一個訊號後,會先處理響應訊號,再喚醒pause函式。於是有下面幾種情況: ① 如果訊號的預設處理動作是終止程序,則程序將被終止,也就是說一收到訊號程序就終止了,pause函式根本就沒有機會返回; ② 如果訊號的預設處理動作是忽略,則程序將直接忽略該訊號,相當於沒收到這個訊號,程序繼續處於掛起狀態,pause函式不返回; ③ 如果訊號的處理動作是捕捉,則程序呼叫完訊號處理函式之後,pause返回-1,errno設定為EINTR,表示“被訊號中斷”。 ④ pause收到的訊號不能被遮蔽,如果被遮蔽,那麼pause就不能被喚醒。 因為alarm函式可以在設定的時間之後傳送SIGALRM訊號,pause函式又可以將程序掛起等待訊號,則二者結合可以自己寫一個sleep函式,如下: ``` 1#