Android设置线程亲和力

时间:2013-05-01 14:11:42

标签: android c multithreading android-ndk multicore

根据this StackOverflow question的答案,如何创建正确的答案 掩码的整数?

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

3 个答案:

答案 0 :(得分:11)

好吧,最后我找到了一些直接来自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))

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

尝试在包含<sched.h>

之前添加此内容
#define _GNU_SOURCE
相关问题