按照这个 StackOverflow 问题的答案,我如何为掩码创建正确的整数?
我做了一些谷歌搜索,我发现的所有东西都使用CPU_SET
宏,sched.h
但它cpu_set_t
在使用 NDK 时未定义的结构上运行。当尝试使用CPU_SET
链接器给我未定义的引用错误(即使我链接到 pthread)。
按照这个 StackOverflow 问题的答案,我如何为掩码创建正确的整数?
我做了一些谷歌搜索,我发现的所有东西都使用CPU_SET
宏,sched.h
但它cpu_set_t
在使用 NDK 时未定义的结构上运行。当尝试使用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亲和力。当然,如果您的应用程序中有一个线程,它运行良好,但多个线程是错误的。例如在 http://linux.die.net/man/2/sched_setaffinity 上检查 sched_setaffinity() 描述
尝试在包含之前添加它<sched.h>
#define _GNU_SOURCE