android - Android 上的 pthread_create 警告

标签 android c pthreads thread-priority

调用 pthread_create 函数后,我收到下一条消息:

W/libc (26409): pthread_create sched_setscheduler call failed: Operation not permitted

用于创建线程的代码是:

pthread_attr_t threadAttr;
int ret = pthread_attr_init(&threadAttr);
//code to check ret - it's 0

size_t guard_size = 0;
pthread_attr_getguardsize(&threadAttr, &guard_size);
ret = pthread_attr_setstacksize(&threadAttr, myStackSize + guard_size);
//code to check ret - it's 0

ret = pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED);
//code to check ret - it's 0

ret = pthread_attr_setschedpolicy(&threadAttr, SCHED_FIFO);
//code to check ret - it's 0

sched_param  schedParam;
schedParam.sched_priority = myPriority; //it's 16
ret = pthread_attr_setschedparam(&threadAttr, &schedParam);
//code to check ret - it's 0

// Create the thread
ret = pthread_create(&myHandle, &threadAttr, RunCallback, (void *)myData);
//code to check ret - it's 0
//code to check myHandle - it's > 0

// Delete attribute
pthread_attr_destroy(&threadAttr);

请注意,在命中 RunCallback 中的断点之前,该消息会出现在 logcat 中。

你知道为什么我有这个警告吗?忽略它是否安全 - 如果是,为什么?

PS:代码在具有 4.4.2 操作系统版本(内部版本号 KOT49H)的 Nexus 4 设备上作为 native Activity 运行。

最佳答案

当您调用 pthread_attr_setschedpolicy 时,您请求设置特定的调度策略 (http://man7.org/linux/man-pages/man3/pthread_attr_setschedpolicy.3.html)。您正在设置的策略 SCHED_FIFO 是根据 http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html 的实时策略。 .根据 http://man7.org/linux/man-pages/man7/capabilities.7.html,将调度策略设置为实时策略需要 CAP_SYS_NICE 功能.因此,除非您具备该功能,否则 pthread_attr_setschedpolicy 调用将失败。

要解决此问题,要么删除调度程序属性(并使用默认调度),要么确保您的进程以正确的功能启动(例如,以 root 身份启动它并删除除 CAP_SYS_NICE 之外的所有权限)。

关于android - Android 上的 pthread_create 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21095234/

相关文章:

android - 如何在 android list 中使用 <edit-config> 设置工具命名空间

c - 带有(死的)简单 C 程序的错误

iPhone:多任务、多线程?

android - 了解配置是否更改的最佳方法是什么?

android - 整合推特 : why can’t I post status without having to authenticate?

c - 按字符读取流字符

c - ANSI C 我在 fwrite 和 fread 上做错了什么?

使用用户输入控制 POSIX 线程

c++ - 必须将互斥锁用于数组中的 "get"值吗?

android - 从兼容性 fragment 添加/更改兼容性 SimpleMenu/MenuItem