gpt4 book ai didi

c# - 在 Mono (Linux) 上为当前线程设置处理器关联

转载 作者:可可西里 更新时间:2023-11-01 11:49:42 26 4
gpt4 key购买 nike

我正在编写一个自定义任务调度程序,我想知道是否有任何方法可以为 Mono(在 Linux 上运行)上的当前线程设置处理器关联。

对于在 Windows 上运行的 .NET 运行时,我已经按照 Lenard Gunda 的 Running .NET threads on selected processor cores 设法让它工作。文章;然而,他的方法在 Mono(和 Linux)上失败了,因为:

  1. 它需要对 Kernel32.dll 库中的 GetCurrentThreadId 进行 P/Invoke 调用。
  2. Process.Threads属性当前在 Mono 上返回一个空集合。

有人对此有解决方法吗?

最佳答案

lupus的答案是正确的,但我花了一些进一步的研究来实现它(例如 P/Invoke signature for sched_setaffinityresolution of libc.so.6 )。这是工作代码(不包括错误处理)以备不时之需:

[DllImport("libc.so.6", SetLastError=true)]
private static extern int sched_setaffinity(int pid, IntPtr cpusetsize,
ref ulong cpuset);

private static void SetAffinity(int processorID)
{
ulong processorMask = 1UL << processorID;
sched_setaffinity(0, new IntPtr(sizeof(ulong)), ref processorMask);
}

编辑:以上签名在我的实验中运行良好,但请引用 David Heffernan's answer (在我的另一个问题下)建议更正。

关于c# - 在 Mono (Linux) 上为当前线程设置处理器关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com