题
我有一个代码,“声音”是这样的:
线程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_gettime与CLOCK_MONOTONIC,但我想耳一些其他线索第一。
解决方案
在理论上TSC应该是所有的CPU的主板上之间的syncronised,但在某些SMP系统它不是,怪主板制造商。此外,在一些老芯片TSC似乎与CPU的电源状态使它可能非常不可靠的改变。 clock_gettime(CLOCK_MONOTONIC)是更可靠的,但更多的开销(这是一个系统调用),但目前要做到这一点的最好办法。
我也假设你锁定你的数据结构:)
不隶属于 StackOverflow