是否可以在Android中设置与sched_setaffinity的亲和力?

时间:2011-09-19 07:51:39

标签: c multithreading android-ndk multicore

是否可以在使用Android NDK编译的本机C代码中设置CPU亲和力?由于系统使用的是Linux内核,因此应该可以使用sched_setaffinity / sched_getaffinity函数,但是当我使用NDK进行编译时,我会收到错误抱怨cpu_set_t类型未知(用作函数的参数) 。有没有其他方法可以实现这一目标?当我使用CodeSourcerys ARM编译器(arm-none-linux-gnueabi-gcc)编译时,这似乎不是问题,因此系统显然支持所需的系统调用。

2 个答案:

答案 0 :(得分:19)

以下代码适用于NDK r5或更新版本:

#include <sys/syscall.h>
#include <pthread.h>
void setCurrentThreadAffinityMask(int mask)
{
    int err, syscallres;
    pid_t pid = gettid();
    syscallres = syscall(__NR_sched_setaffinity, pid, sizeof(mask), &mask);
    if (syscallres)
    {
        err = errno;
        LOGE("Error in the syscall setaffinity: mask=%d=0x%x err=%d=0x%x", mask, mask, err, err);
    }
}

答案 1 :(得分:0)

对于 cpu_set_t,我能够为 Android NDK 使用 -D_GNU_SOURCE=1 选项进行编译。

相关问题