我想防止一个线程在多个内核上执行,我不希望当某个线程在一个内核上执行时,它不应该被安排在另一个内核上执行。
我使用x86指令rdtsc生成时间戳。当从不同的CPU内核调用此指令时,可能会使用不同的时间戳计数器,并且由于不同的计数器不会通过CPU内核同步,因此可能会出现不一致的结果。
在Windows上,有一个函数强制执行此行为:
DWORD_PTR WINAPI SetThreadAffinityMask(
__in HANDLE hThread,
__in DWORD_PTR dwThreadAffinityMask
);
为指定线程设置处理器关联掩码。
MSDN link
unix系统有类似的东西吗?
最佳答案
使用solaris,您可以使用cpu绑定,它可以应用于单个线程、单个进程、一组进程或区域中的所有进程。请参见processor_bind和pbind。
关于linux - 用于Unix系统的SetThreadAffinityMask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6000978/