Process and ProcessThread objects have a ProcessorAffinity property of IntPtr type that can be directly manipulated to read/change affinity for up to 64 processors:
using System.Diagnostics;
Process proc = Process.GetCurrentProcess();
long affinityMask = 0x000F; // use only any of the first 4 available processors
proc.ProcessorAffinity = (IntPtr)affinityMask;
ProcessThread thread = proc.Threads[0];
affinityMask = 0x0002; // use only the second processor, despite availability
thread.ProcessorAffinity = (IntPtr)affinityMask;
You can also use the thread’s IdealProcessor property to allow the scheduler to prefer running the thread on a specified processor (without guarantee).
Yes, it’s that easy 🙂
Reference: ProcessThread.ProcessorAffinity Property