从这个StackOverflow问题的答案,我如何创建适当的掩码是整数吗?
我做了一些谷歌搜索,我发现的一切都使用sched.h
的CPU_SET
宏,但它在使用NDK时未定义的cpu_set_t
结构上运行。当尝试使用CPU_SET
链接器给我未定义的引用错误(即使我链接到pthread)。
最后我找到了一些直接取自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
时,这工作得很好。
我想要注意的是,在第一篇文章中链接的函数没有设置线程cpu亲和力。适合设置进程cpu亲和度。当然,如果您的应用程序中只有一个线程,那么它工作得很好,但对于多个线程则是错误的。查看sched_setaffinity()描述,例如在http://linux.die.net/man/2/sched_setaffinity
尝试在包含<sched.h>
之前添加此
#define _GNU_SOURCE