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