当核心处于睡眠状态时,pthread_setaffinity_np会失败吗?我怎么能叫醒他们?

时间:2014-10-14 13:37:35

标签: android c linux multithreading operating-system

我在带有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的解决方案都可以。

0 个答案:

没有答案