我想防止一个线程在多个内核上执行,我不希望当某个线程在一个内核上执行时,它不应该被安排在另一个内核上执行。
我使用x86指令rdtsc生成时间戳。当从不同的CPU内核调用此指令时,可能会使用不同的时间戳计数器,并且由于不同的计数器不会通过CPU内核同步,因此可能会出现不一致的结果。
在Windows上,有一个函数强制执行此行为:

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

为指定线程设置处理器关联掩码。
MSDN link
unix系统有类似的东西吗?

最佳答案

使用solaris,您可以使用cpu绑定,它可以应用于单个线程、单个进程、一组进程或区域中的所有进程。请参见processor_bindpbind

关于linux - 用于Unix系统的SetThreadAffinityMask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6000978/

10-08 20:34