我在3.10.24 Linux内核的ARM机器上使用这样的构造:
CPU_ZERO(&affinity); CPU_SET(3, &affinity); pthread_t thread = pthread_self(); iErr = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &affinity);
iErr是22,pthread_setaffinity_np失败。 在x86上,代码完美地工作。 如果我把线程亲和力设置为核心0,它的工作原理。
现在我认为这与我的问题有关 ,即使CPU有4个内核,以下指令也输出1。
iNumProc = sysconf(_NPROCESSORS_CONF); iNumProc = get_nprocs();
我开始认为这两个问题是相关的。
所以我的猜测(由其中一个评论build议)是核心1,2,3保持睡着,我需要手动让他们醒来,然后请求调度程序把一些线程。
在这种情况下,您是否有任何想法在设置亲和力之前手动唤醒核心? 任何在Linux / Android上工作的解决scheme都可以。