曲径通幽论坛

标题: 获取当前时间 | current_kernel_time() [打印本页]

作者: beyes    时间: 2011-5-8 14:26
标题: 获取当前时间 | current_kernel_time()
内核:2.6.11 32位 x86
获取当前时间可通过 xtime 变量获得,它是 struct timespec 类型,此类型是秒与纳秒结构:
[C++] 纯文本查看 复制代码
 
struct timespec {
time_t tv_sec;  /* seconds */
long tv_nsec; /* nanoseconds */
};

但是不推荐直接使用该变量,因为很难原子性的访问上面的两个成员,所以内核提供了 current_kernel_time() 这个函数,该函数实现如下(kernel/time.c):
[C++] 纯文本查看 复制代码
 
inline struct timespec current_kernel_time(void)
{
        struct timespec now;
        unsigned long seq;
do {
  seq = read_seqbegin(&xtime_lock);
  
  now = xtime;
} while (read_seqretry(&xtime_lock, seq));
return now;
}

上面函数使用顺序锁保证了原子性读取 xtime 变量。

测试代码和一个类似的函数 do_gettimeofday() 可参考:http://www.groad.net/bbs/read.php?tid-1222.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2