8

按照这个 StackOverflow 问题的答案,我如何为掩码创建正确的整数?

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

4

3 回答 3

14

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

于 2013-05-01T18:08:53.110 回答
5

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

于 2014-02-02T13:36:28.430 回答
2

尝试在包含之前添加它<sched.h>

#define _GNU_SOURCE
于 2014-04-03T08:20:38.977 回答