2

如何禁止任何应用程序的所有线程在特定 CPU 内核上运行,除非我指定的线程(在 Win/nix 中)?

要将线程或进程绑定到特定的 CPU 内核,我们可以使用 OS-API 函数:POSIX 中的 sched_setaffinity() 和 WINAPI 中的 SetProcessAffinityMask()、SetThreadAffinityMask()。

但是如果我们想,在这些内核上不会启动许多第三方应用程序的任何其他线程,而这些第三方应用程序当前运行在操作系统上,该怎么做呢?

更新:需要一个实时系统 - 必须由我指定线程从未发生上下文切换或临时暂停。

可能的解决方案:

  • 使用实时操作系统,例如 QNX
  • 除了绑定到处理器内核,设置实时的优先级
  • 使用 XEN 虚拟化跨操作系统分配处理器内核

使用固定内存可以轻松解决页面错误:(POSIX) mlock() 或 (WINAPI) VirtualLock()

4

1 回答 1

2

如果您将进程和线程设置为实时优先级,那么它们会将其他所有内容排除在外。使用SetPriorityClass设置线程的进程优先级和SetThreadPriority,如下所示:

SetPriorityClass(HProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(HThread, THREAD_PRIORITY_TIME_CRITICAL);
于 2013-08-22T15:38:13.493 回答