0

sched_setaffinity私は最近、プロセスのアフィニティを特定のコアに設定するために、 JNA を使用して呼び出しを行うコード [1][2] を書きました。関数の最初の引数はsched_setaffinityプロセス ID です。

pid を 0 として関数を呼び出す (プロセス自体を参照する) と、正常に機能します。ただし、プロセスではなくスレッド ID ベースでアフィニティを設定できるようにしたいと考えています。それを行う方法はありますか?

  1. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ctest.c
  2. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ThreadAffinity.java
4

1 に答える 1

0

スレッド thread の CPU アフィニティ マスクを cpuset が指す CPU セットに設定できるpthread_setaffinity_npという関数があります。

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core_id, &cpuset);

pthread_t current_thread = pthread_self();    
pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);

このコードは、スレッドをコア (core_id で表される) に設定できます。

私の知る限り、Java スレッドは OS のスレッドと常に一致するとは限りません。したがって、このネイティブ コードが役立つかどうかはよくわかりません。

于 2013-11-17T12:33:04.457 に答える