2013年8月16日 星期五

Linux timeout by jiffies

之前這篇提到,Linux 的 udelay() 以迴圈延遲 1µs。每個 tick 可以跑 loops_per_jiffy 個延遲迴圈,一秒就是 loops_per_jiffy * HZ 個迴圈,1µs 就是 loops_per_jiffy * HZ / 1000000 個迴圈。mdelay() 或 ndelay() 也是類似的作法。但這些函數都是 busy waiting,等待時不能做其它事。

jiffies 是 Linux 全域變數,每 1/HZ 秒會自動加一,可用來判斷 timeout。範例如下:

unsigned long timeout;

timeout = jiffies + HZ/2; /* 500 ms timeout */

do{
        /* do something */
        if (some_state)
                break;
} while (time_after(timeout, jiffies)); /* 500ms timeout */

jiffies 跟 time_after 定義在 inclue/linux/jiffies.h。

相關文章

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...