Java进程与线程相关的线程

时间:2013-11-17 11:26:08

标签: java c linux pthreads affinity

我最近编写了一些代码[1] [2],尝试使用JNA调用sched_setaffinity以尝试将进程的亲和性设置为特定的核心。函数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

1 个答案:

答案 0 :(得分:0)

有一个名为pthread_setaffinity_np的函数可以将线程线程的CPU关联掩码设置为cpuset指向的CPU集。

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 Thread并不总是与OS中的线程匹配。所以我不太确定这段本机代码是否可以帮助你。