我在带有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();
我开始认为这两个问题是相关的。
所以我的猜测(其中一条评论建议)是核心1,2,3保持睡眠状态,我需要手动要求它们唤醒,然后请求调度程序放置一些线程在他们身上。
在这种情况下,您是否知道如何在设置关联之前手动唤醒核心?任何适用于Linux / Android的解决方案都可以。