2

我目前正在从事一个项目,我需要能够在纳秒分辨率范围内测量内核和线程的相对经过时间。谷歌搜索我能够找到以下代码片段:

kern_return_t ret;
clock_serv_t aClock;
mach_timespec_t aTime;

ret = host_get_clock_service(mach_host_self(), REALTIME_CLOCK,
                             &aClock);
if (ret != KERN_SUCCESS) {
    fprintf(stderr, "host_get_clock_service() failed: %s\n",
            mach_error_string(ret));
    abort();
}
ret = clock_get_time(aClock, &aTime);
if (ret != KERN_SUCCESS) {
    fprintf(stderr, "clock_get_time() failed: %s\n",
            mach_error_string(ret));
    abort();
}

玩弄这个函数clock_get_time 实际上会返回一个结构,其中包含自CPU 开机以来经过的秒数和纳秒数。但是,我不确定此函数返回的值是否可以安全地跨内核和线程使用。

除了 mach 调用的一些手册页之外,我找不到很多关于此的文档。有人试过这个吗?如果是这样,您能否指出我的文档方式?我需要明确知道计数器在内核和线程之间是一致的。

我知道这个问题是特定于硬件和操作系统的。我目前在 Intel Core i7 2.5 ghz 处理器上运行 Mac OS X 10.9。

谢谢你的时间。

4

0 回答 0