3

カスタム タスク スケジューラを作成しています。Mono (Linux で実行) で現在のスレッドのプロセッサ アフィニティを設定する方法があるかどうかを知りたいです。

Windows で実行されている .NET ランタイムについては、Lenard Gunda の「選択したプロセッサ コアで .NET スレッドを実行する」という記事に従って、これを機能させることができました。ただし、彼のアプローチは Mono (および Linux) では次の理由で失敗します。

  1. ライブラリGetCurrentThreadIdでの P/Invoke 呼び出しが必要です。Kernel32.dll
  2. このProcess.Threadsプロパティは現在、Mono で空のコレクションを返します。

誰でもこれに対する回避策を教えてください。

4

2 に答える 2

2

タスクがいつ実行されるかを実際に制御できないことに注意してください。それはカーネル次第です。とにかく、Linux では、スレッドを特定の CPU にバインドするために sched_setaffinity() を P/Invoke する必要があります。

インターフェイスについては、man sched_setaffinity を参照してください。

于 2013-03-29T08:22:07.333 に答える