2011-09-19 5 views
13

Android NDK로 컴파일 된 네이티브 C 코드에서 CPU 선호도를 설정할 수 있습니까? 시스템이 Linux 커널을 사용하기 때문에 sched_setaffinity/sched_getaffinity 함수를 사용할 수 있어야하지만 NDK로 컴파일 할 때 cpu_set_t 유형을 알 수없는 오류가 발생합니다 (함수에 대한 인수로 사용됨) . 이 작업을 수행 할 수있는 다른 방법이 있습니까? CodeSourcerys ARM 컴파일러 (arm-none-linux-gnueabi-gcc)로 컴파일하면 문제가되지 않으므로 시스템이 필요한 syscalls를 분명히 지원합니다.Android에서 sched_setaffinity와의 친화력을 설정할 수 있습니까?

답변

17

다음 코드는 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); 
    } 
} 
+0

감사합니다, 그것은 작동하는 것 같다! gettid()의 암시 적 선언에 대한 불만이 있지만 sys/types.h (올바른 파일이어야 함)를 포함하더라도 컴파일러에서 불평을 멈추게 할 수는 없습니다. 어떤 아이디어? – Leo

+0

'pthread.h '대신에'unistd.h'가 있어야한다고 생각합니다. 너무 많은 프로젝트가 포함되어 있으며이 기능을 위해 어느 것이 필요한지 확실하지 않습니다. –

+0

@Andrey Kamaev : 안녕하세요, 저는 귀하의 기능을 사용하려고합니다. 입력 마스크 값은 무엇입니까? – Nrupatunga

관련 문제