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