linux - Unix 系统的 SetThreadAffinityMask

标签 linux multithreading unix scheduling

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

我使用 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.

MSDN link

unix 系统有类似的东西吗?

最佳答案

在 Solaris 中,您可以使用 CPU 绑定(bind),它可以应用于单个线程、单个进程、一组进程或一个区域中的所有进程。参见 processor_bindpbind .

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

相关文章:

python - 在 Linux 中保存 matplotlib 动画

c++ - FlannBasedMatcher 匹配器构建

linux - 如何将表的每条记录加载到单独的文件中?

linux - 目录上次修改日期

bash - 使用 sed 在 linux 上进行文本替换(从文件读取并保存到同一文件)

linux - 如何使用 ssh tail 命令写入本地文件

linux - 如何在 bash 中使用 $find 命令抑制文件夹排序

java - 错误和线程

java - volatile 数组和引用位置

java - Java中线程的终止条件