SetThreadAffinityMask関数のメモ

http://msdn.microsoft.com/ja-jp/library/cc429346.aspx におけるSetThreadAffinityMask 関数の説明によれば,

DWORD SetThreadAffinityMask (
  HANDLE hThread,             // 操作対象スレッドのハンドル
  DWORD dwThreadAffinityMask  // スレッドアフィニティマスク
);

であり,

スレッドアフィニティマスクはビットベクトルであり、各ビットはそのスレッドを実行できるプロセッサを表します。

とある.

例として,利用可能なcpuコア番号が0,1,2・・・のとき,

  SetThreadAffinityMask(GetCurrentThread(), 0x00000001); // 現在のスレッドを0番目のコアに固定
  SetThreadAffinityMask(GetCurrentThread(), 0x00000002); // 現在のスレッドを1番目のコアに固定

のようになる.スレッドアフィニティマスクの指定の仕方は,

 0x00000001 // (コア0が有効: 0b0001)
 0x00000002 // (コア1が有効: 0b0010)
 0x00000003 // (コア1,0が有効: 0b0011)
 0x00000004 // (コア2が有効: 0b0100)
...

とするようだ.(cpuに対応したビットを立てる)

dwThreadAffinityMask が DWORD型(32bit)なので,この方法だと33コア以上は扱えない様子.