Android设置线程亲和力

Num*_*our 6 c multithreading android multicore android-ndk

根据StackOverflow问题的答案,如何为掩码创建正确的整数?

我做了一些谷歌搜索,我发现的所有东西都使用了CPU_SET宏,sched.h但它cpu_set_t在使用NDK时未定义的结构上运行.当尝试使用CPU_SET链接器给我未定义的引用错误(即使我链接到pthread).

Num*_*our 12

好吧,最后我找到了一些直接从中获取的版本sched.h.如果有人有同样的问题并且不想花时间搜索它,我在这里发布.这非常有用.

#define CPU_SETSIZE 1024
#define __NCPUBITS  (8 * sizeof (unsigned long))
typedef struct
{
   unsigned long __bits[CPU_SETSIZE / __NCPUBITS];
} cpu_set_t;

#define CPU_SET(cpu, cpusetp) \
  ((cpusetp)->__bits[(cpu)/__NCPUBITS] |= (1UL << ((cpu) % __NCPUBITS)))
#define CPU_ZERO(cpusetp) \
  memset((cpusetp), 0, sizeof(cpu_set_t))
Run Code Online (Sandbox Code Playgroud)

当原始中的参数类型setCurrentThreadAffinityMask(来自问题中提到的帖子)简单地替换为时,这很有效cpu_set_t.

  • @Samveen 由于某些原因,他们可能不想将所有 API 公开给 NDK 应用程序 (2认同)

小智 5

我想请您注意第一篇文章中的链接函数没有设置线程 CPU 关联性。适合设置进程cpu亲和度。当然,如果您的应用程序中有一个线程,它运行良好,但对于多个线程则是错误的。检查 sched_setaffinity() 描述,例如http://linux.die.net/man/2/sched_setaffinity