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