4

Windowsでスレッドが厳密な優先順位でスケジュールされていることに依存できる場合、はるかに簡単になるテストプログラムがあります。優先度の低いスレッドが優先度の高いスレッドと並行して実行されているのが見えます。これは、異なるスレッドが異なるプロセッサ コアでスケジュールされているために発生しているのではないかと考えています。

プロセス内のすべての Win32 スレッドを強制的に単一のプロセッサ コアを使用する方法はありますか? SetThreadAffinityMaskは興味深いかもしれませんが、そのドキュメントは完全に明確ではなく、使用方法もわかりません。

4

2 に答える 2

6

SetThreadAffinityMask 関数: 指定されたスレッドのプロセッサ アフィニティ マスクを設定します。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686247%28v=vs.85%29.aspx

SetThreadAffinityMask(GetCurrentThread(), (1 << CoreNumber));

現在のスレッドのアフィニティを「CoreNumber」変数に設定します

于 2012-10-26T12:23:25.373 に答える
0

Even if you force all threads onto one virtual processor you will still often have low-priority threads running and high-priority threads waiting for them (priority inversion). Once a thread is scheduled by the windows-scheduler it runs until it is either preempted or sleeps (or some other sleep-inducing system call). You will have to change the design of your application so that it no-longer assumes that no low-priority thread runs while a high-priority thread would be ready to run also.

于 2012-10-26T12:25:29.240 に答える