Можно ли установить сходство с sched_setaffinity в Android? - PullRequest
13 голосов
/ 19 сентября 2011

Можно ли установить привязку к процессору в собственном коде C, скомпилированном с помощью Android NDK? Поскольку система использует ядро ​​Linux, должно быть возможно использовать функции sched_setaffinity / sched_getaffinity, но когда я компилирую с помощью NDK, я получаю ошибки, сообщающие, что тип cpu_set_t неизвестен (который используется в качестве аргумента для функций) , Есть ли другой способ сделать это? Когда я компилирую компилятор CodeSourcerys ARM (arm-none-linux-gnueabi-gcc), это не кажется проблемой, поэтому система, очевидно, поддерживает необходимые системные вызовы.

1 Ответ

19 голосов
/ 19 сентября 2011

Следующий код хорошо работает с 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);
    }
}
...