是否可以在Android中使用sched_setaffinity设置亲和力?

发布于 2024-12-05 09:46:14 字数 261 浏览 1 评论 0原文

是否可以在使用 Android NDK 编译的本机 C 代码中设置 CPU 关联性?由于系统使用 Linux 内核,应该可以使用 sched_setaffinity/sched_getaffinity 函数,但是当我使用 NDK 编译时,我收到错误,抱怨 cpu_set_t 类型未知(用作函数的参数) 。还有其他方法可以实现此目的吗?当我使用 CodeSourcerys ARM 编译器 (arm-none-linux-gnueabi-gcc) 进行编译时,这似乎不是问题,因此系统显然支持所需的系统调用。

Is it possible to set CPU affinity in native C code compiled with the Android NDK? Since the system is using a Linux kernel, it should be possible to use the sched_setaffinity/sched_getaffinity functions, but when I compile with the NDK, I get errors complaining that the cpu_set_t type is unknown (which is used as an argument to the functions). Is there any other way to accomplish this? When I compile with CodeSourcerys ARM compiler (arm-none-linux-gnueabi-gcc) this does not seem to be a problem, so the system obviously supports the required syscalls.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风疏影 2024-12-12 09:46:14

以下代码适用于 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);
    }
}

The following code works well with NDK r5 or newer:

#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);
    }
}
倒带 2024-12-12 09:46:14

对于 cpu_set_t,我能够使用 Android NDK 的 -D_GNU_SOURCE=1 选项进行编译。

For cpu_set_t, I was able to compile with -D_GNU_SOURCE=1 option for Android NDK.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文