用于unix系统的SetThreadAffinityMask

时间:2011-05-14 09:37:19

标签: linux multithreading unix scheduling

我想防止线程在多个核心上执行,我不希望当某个核心在一个核心上执行时,它不应该被安排在另一个核心上执行。

我使用x86指令RDTSC生成时间戳。当从不同的CPU内核调用此指令时,可能会使用不同的时间戳计数器,并且由于不同的计数器未通过CPU内核同步,因此可能会出现不一致的结果。

在Windows上有一个强制执行此操作的功能:

DWORD_PTR WINAPI SetThreadAffinityMask(
  __in  HANDLE hThread,
  __in  DWORD_PTR dwThreadAffinityMask
);
  

为指定的线程设置处理器关联掩码。

MSDN link

unix系统有类似的东西吗?

2 个答案:

答案 0 :(得分:1)

Linux 2.5.8及更高版本有sched_setaffinity()。它通常在进程级别使用,但也适用于线程:

  

亲和力掩码实际上是一个   可以是每线程属性   为每个人独立调整   线程组中的线程。价值   通过致电gettid(2)可以回复   在论证pid中传递。

答案 1 :(得分:1)

使用Solaris,您可以使用CPU绑定,该绑定可应用于单个线程,单个进程,一组进程或区域中的所有进程。请参阅processor_bindpbind