单次调用的 CLOCK_REALTIME 和 CLOCK_MONOTONIC

标签 c

我依次使用 clock_gettime(CLOCK_MONOTONIC, &tsp1)clock_gettime(CLOCK_REALTIME, &tsp2)。我可以通过一次调用来减少差异吗?

最佳答案

没有标准的、可移植的方法来执行此操作 - clock_gettime 基于不支持此类“多查询”的操作系统功能。扩展此功能并非易事 - 并且可能需要开发一个驱动程序来为您公开此功能。


特别是在 Linux 上,这可能相对容易,并且不需要编写驱动程序。

在 Linux 上,clock_gettime 实际上并不调用内核 - 它使用 vdso它允许内核向用户空间公开信息,而无需切换到内核模式。这种用法的经典示例是像 gettimeofdayclock_gettime 这样的函数 - 这些不是特权函数(CLOCK_REALTIME 除外,它确实需要一些权限),并且可以将信息提供给用户空间以提高效率。

您可以利用 vdso 自己直接访问数据 - 查看 /lib/vdso/gettimeofday.c 中的函数- 访问暴露给vdso的表来获取当前时间。我专门链接到 do_hres 这似乎是直接访问时间戳的函数。

通过亲自访问 vdso 表,您可以最大限度地减少开销并减少两次调用之间的差异。

关于单次调用的 CLOCK_REALTIME 和 CLOCK_MONOTONIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69188720/

相关文章:

C编程: Dereferencing pointer to incomplete type error

C - fork - 等待问题

embedded - "volatile"关键字对于嵌入式系统有什么意义?

c++ - 将 hus 和 pes 文件转换为任何类型的图像

c - 循环内的宏和函数

c - C语言printf中的%s和%d是什么意思?

c - 在 C 中打印一个奇数哈希倒三角形

c - 如何在C中将rpm转换为rad/s?

交换指针时的困惑

c - C 中的递归问题