c++ - 获取当前线程时间id的操作开销大吗?

标签 c++ c multithreading

<分区>

我将在我的代码中对性能非常关键的地方使用当前运行线程的 id,所以我应该选择是将该 id 缓存在某个地方还是调用一个方法(gettid for unix -like 系统和 GetCurrentThreadId for windows)每次都获取它。那么哪个更好呢?获取线程id是系统调用吗?

最佳答案

至少在 Windows 中,GetCurrentThreadId() 相当便宜,并且不涉及系统调用。基本上它可以:

int GetCurrentThreadId() { 
    _asm { 
        mov eax, fs:[18h]
        mov eax, [eax+24h]
    }
}

将值缓存在您自己的变量中可能会有一点好处,但不是很多。主要好处可能是,如果您将变量与其他经常使用的变量一起存储,这可以提高局部性(从而提高缓存使用率)。

因此,除非您正在处理如此紧密的循环以致于消除一次(或可能两次)内存获取的可能性很大,否则您不太可能通过缓存它返回的值获得太多 yield 。

关于c++ - 获取当前线程时间id的操作开销大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007771/

相关文章:

c - 是否可以在不使用移位或异或的情况下找到 x86 中数字的最小值/最大值?

c++ - 使以下记录器实现线程安全的更好方法?

django - Django 持久数据库连接线程安全如何?

c++ - Qt 和 C++ 的报告库

c++ - 从 __m128i 中查找最小值/最大值

C++ 打印行号以及二维数组的最大行数

c - 我在哪里可以找到 struct proc_dir_entry 的定义

C++ 阶乘程序为任何大于 2 的数给出无穷大

c - 为什么 NtOpenSection 返回错误号 0xc0000024?

multithreading - 如何让一个线程从 HashMap 中删除而另一个线程插入?