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_gettime 与CLOCK_MONOTONIC 一起使用,但我想先听听其他一些提示。

4

1 回答 1

1

理论上 TSC 应该是主板上所有 CPU 之间的同步,但在某些 SMP 系统中它不是,这要怪主板制造商。此外,在一些较旧的芯片上,TSC 似乎会随着 CPU 的电源状态而变化,使其可能非常不可靠。clock_gettime(CLOCK_MONOTONIC) 更可靠,但开销更大(这是一个系统调用),但到目前为止是最好的方法。

我还假设您正在锁定您的数据结构:)

于 2009-02-10T00:08:59.483 回答