linux - rdts 标记时间截止日期

标签 linux multithreading real-time

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

线程 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 之间的同步,但在某些 SMP 系统中它不是,这要怪主板制造商。此外,在一些较旧的芯片上,TSC 似乎会随着 CPU 的电源状态而改变,这使得它可能非常不可靠。 clock_gettime(CLOCK_MONOTONIC) 更可靠,但开销更大(这是一个系统调用),但这是迄今为止最好的方法。

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

关于linux - rdts 标记时间截止日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524502/

相关文章:

java - 编译带有嵌套子类的 Java 类突然不起作用, "access denied"

c++ - Microsoft Detours - DetourUpdateThread?

windows - WinHttp : can it be used in parallel?

ios - 将 Parse.com API 与 Pubnub 结合起来是否是大规模实时消息传递和获取组合工具集的可行选择?

architecture - 您如何编写基于网络的实时协作工具,例如 google docs?

linux - 我在 linux 中创建了一个空文件并向其中添加了一个字符。但它显示为一个 2 字节的文件

c++ - 为 make/g++ 缓存头文件

sql - 没有数据时删除空假脱机文件

java - Mysql和java socket并行压力测试

embedded - 计算放在哪里?内部中断处理程序或主循环? (嵌入式实时应用)