How can I set processor affinity to a thread or a Task in .NET?

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 = (long)Proc.ProcessorAffinity;
  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: MSDN ProcessThread.ProcessorAffinity Property

Leave a Comment