一千萬個為什麽

搜索

在UNIX系統上調用sleep(0)有什麽影響?

我看到人們在我使用的大量多線程,多進程應用程序系統的某些部分執行此操作。它似乎圍繞調試行完成:

std::cerr << "DEBUG: Reaching: " << __FUNCTION__ << " @ " << __LINE__ << std::endl;
sleep(0);

如果我微距睡眠(0); (即將其更改為“”),來自系統的調試輸出似乎有不同的順序(不太可預測),所以我認為它使得該行更快出來 - 但我認為std :: cerr是無緩沖的,並且std: :無論如何,endl調用std :: flush(),為什麽會這樣呢?

最佳答案

基本上,它將控制權交還給調度程序,並允許您立即重新安排。也就是說,嘗試欺騙操作系統做某事基本上是一種破解。

愚弄操作系統絕不是一個好主意。

如果系統適當地欠載,那麽進入休眠狀態將意味著操作系統獲得控制並讓I/O隊列刷新,因此它會產生這種效果。有時。根據。

究竟它正在做什麽取決於實施的細節,坦白地說,你不能依賴它。

轉載註明原文: 在UNIX系統上調用sleep(0)有什麽影響?