我想防止线程在多个核心上执行,我不希望当某个核心在一个核心上执行时,它不应该被安排在另一个核心上执行。
我使用x86指令RDTSC生成时间戳。当从不同的CPU内核调用此指令时,可能会使用不同的时间戳计数器,并且由于不同的计数器未通过CPU内核同步,因此可能会出现不一致的结果。
在Windows上有一个强制执行此操作的功能:
DWORD_PTR WINAPI SetThreadAffinityMask(
__in HANDLE hThread,
__in DWORD_PTR dwThreadAffinityMask
);
为指定的线程设置处理器关联掩码。
unix系统有类似的东西吗?
答案 0 :(得分:1)
Linux 2.5.8及更高版本有sched_setaffinity()。它通常在进程级别使用,但也适用于线程:
亲和力掩码实际上是一个 可以是每线程属性 为每个人独立调整 线程组中的线程。价值 通过致电
gettid
(2)可以回复 在论证pid
中传递。
答案 1 :(得分:1)
使用Solaris,您可以使用CPU绑定,该绑定可应用于单个线程,单个进程,一组进程或区域中的所有进程。请参阅processor_bind和pbind。