在性能方面获得的线程ID是否昂贵?

Art*_*hur 4 c++ multithreading caching

我需要从我不控制的线程中访问线程ID(它在异步回调函数中,并从一组不同的线程调用).

我想知道访问线程ID在性能方面是否昂贵?

我打算使用其中一个boost::this_thread::get_id()GetCurrentThreadId()来自Windows.

为了澄清,我需要为数据从我的回调到达时准备好一些本地缓存数组,并且我正在计划,以避免错误并锁定为每个线程使用本地缓存,并使用线程id访问正确的缓存.另外因为来的数据总是大小不同,我不能把它放在堆栈中,我想避免一直创建和删除堆数据.

Voo*_*Voo 6

Windows将所有特定于线程的信息存储在所谓的TEB中.在x86中,fs寄存器指向此结构的开头,在x64中它是gs寄存器.

在x86窗口中,线程id存储在FS:[0x24],这可能是相当便宜的访问.将信息存储在线程本地存储中涉及一个额外的间接(我们从TEB获取TLS的地址),因此它与您的手动私有缓存基本相同 - 只需要更少的工作.