2009-02-07 63 views
0

我有一個代碼,「聽起來」像這樣:快速診斷標記時間的最後期限

線程1

now = rdtsc(); 
for_each_member_in_a_list { 
    if (member_in_list.deadline() <= now) { 
     do_something; 
    } 
} 

線程2

now = rdtsc(); 
for_each_member_in_a_list { 
    member_in_list.updatedealine(foo(now, ...)); 
} 

現在雖然這是工作在過去的好現在使用SMP系統,此代碼無法按預期工作。我想我會在CLOCK_MONOTONIC中使用clock_gettime,但我想先聽聽其他提示。

回答

1

理論上TSC應該是在主板上的所有CPU之間同步的,但在一些SMP系統中則不然,這是主板製造商的責任。另外,在一些較舊的芯片上,TSC似乎隨着CPU的功率狀態而改變,使其可能非常不可靠。 clock_gettime(CLOCK_MONOTONIC)更可靠,但有更多的開銷(這是一個系統調用),但是迄今爲止這是最好的方法。

我還假設你正在鎖定你的數據結構:)

+0

我正在使用無鎖數據結構。 – 2009-02-10 14:08:19