Linux 标记时间截止日期的RDT

Linux 标记时间截止日期的RDT,linux,multithreading,real-time,Linux,Multithreading,Real Time,我有一个“听起来”像这样的代码: 线程1 now = rdtsc(); for_each_member_in_a_list { if ( member_in_list.deadline() <= now ) { do_something; } } 现在,虽然这在过去的SMP系统中运行良好,但这段代码并没有按预期工作。我想我会使用clock_gettime和clock_单调,但我想先听听其他提示。理论上,TSC应该是主板上所有CPU之间的同步,但在某些SMP系统中不

我有一个“听起来”像这样的代码:

线程1

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

现在,虽然这在过去的SMP系统中运行良好,但这段代码并没有按预期工作。我想我会使用clock_gettime和clock_单调,但我想先听听其他提示。

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


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

我正在使用无锁数据结构。
now = rdtsc();
for_each_member_in_a_list {
   member_in_list.updatedealine( foo(now, ...) );
}