以一個爲參數的睡眠呼叫的預期持續時間是多少?這是否是一段不超過1秒的隨機時間?至少有一秒的隨機時間?預期的睡眠時間(1)
場景:
顯影劑A寫到按順序執行一些步驟與輸出設備的代碼。該代碼已發貨,A離開。
開發者B從現場被告知步驟j和k需要它們之間的一秒間隔。所以他在這些步驟之間插入一個
sleep(1)
的電話。該代碼已發貨且開發者B離開。開發者C想知道
sleep(1)
是否應該預計足夠長的睡眠時間,或者是否應該使用更高分辨率的方法來確保至少1000毫秒的延遲發生。
以一個爲參數的睡眠呼叫的預期持續時間是多少?這是否是一段不超過1秒的隨機時間?至少有一秒的隨機時間?預期的睡眠時間(1)
場景:
顯影劑A寫到按順序執行一些步驟與輸出設備的代碼。該代碼已發貨,A離開。
開發者B從現場被告知步驟j和k需要它們之間的一秒間隔。所以他在這些步驟之間插入一個sleep(1)
的電話。該代碼已發貨且開發者B離開。
開發者C想知道sleep(1)
是否應該預計足夠長的睡眠時間,或者是否應該使用更高分辨率的方法來確保至少1000毫秒的延遲發生。
sleep()
只保證這一進程將睡眠至少指定的時間量,所以你把它「一些隨機的時間至少是一秒鐘。」
類似的行爲在man page爲nanosleep
提到:
了nanosleep()暫停調用線程的執行,直到至少在* REQ指定經過的時間...
你也可以在this question找到有用的答案。
我的男人頁這樣說:
unsigned int sleep(unsigned int seconds);
DESCRIPTION
sleep() makes the calling thread sleep until seconds seconds have
elapsed or a signal arrives which is not ignored.
...
RETURN VALUE
Zero if the requested time has elapsed, or the number of seconds left
to sleep, if the call was interrupted by a signal handler.
所以睡眠使線程休眠,只要你告訴它,而是一個信號喚醒它。我看不到進一步的保證。
如果您需要更好,更精確的等待時間,那麼睡眠不夠好。有nanosleep和(聽起來很有趣,但是是真的)選擇是唯一posix便攜式睡覺亞秒(或更高精度)的方式,我知道。
因此,如果返回值爲零,這意味着假設沒有「睡眠時間」秒。但是,如果一個信號終止了睡眠,並且線程已經睡着了949毫秒,睡眠會返回1還是0? – 2012-03-08 21:21:39
儘管差異與此問題無關,但「使調用線程睡眠」(文檔)和「使進程處於睡眠狀態」(您的解釋)不是同一回事。 – hvd 2012-03-08 21:39:39
@ hvd,你是對的,我更新了我的措辭。謝謝。 – 2012-03-08 21:41:25