基於我在linux/include/linux/jiffies.h找到的代碼:time_after()linux宏對於jiffies的繞回是100%的傻瓜嗎?
41 #define time_after(a,b) \
42 (typecheck(unsigned long, a) && \
43 typecheck(unsigned long, b) && \
44 ((long)(b) - (long)(a) < 0))
在我看來,沒有一種涉及周圍包裹監控的。因此,如果jiffies(a)要環繞並返回非常接近超時(b),那麼當結果實際爲「true」時,結果將爲「false」。
讓我們在這個例子中使用一些相當小的數字。說,time_after(110,150)
其中110是jiffies和150是超時。其結果顯然是錯誤的 - 不管的jiffies周圍或不裹:150-110總是> 0
所以,我只是想確認我沒有錯過一些東西,這確實是怎麼回事。
哦,我毫不懷疑,這是看一遍測試。但是,這並不一定證明我錯了。這意味着一定有這樣做的理由。我的理論是,一個進程工作/休眠幾乎不可能~50天(這大概是它在首次將jiffies讀取到的情況下完成一個具有1000HZ定時器頻率的32位jiffies變量的整個循環)用作超時值,然後檢查time_after()。所以,這樣一個簡單的宏是令人滿意的。 – Tux 2011-06-04 04:43:36