我有一个代码,“声音”是这样的:

线程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)是更可靠的,但更多的开销(这是一个系统调用),但目前要做到这一点的最好办法。

我也假设你锁定你的数据结构:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top