如何在 QNX 中找到线程的当前优先级

Posted

技术标签:

【中文标题】如何在 QNX 中找到线程的当前优先级【英文标题】:how to find the current priority of a thread in QNX 【发布时间】:2013-12-31 13:12:44 【问题描述】:

谁能告诉我。我使用了 pthread_getschedparam() 函数,但这不会打印预期值,因为分配的值和当前值实际上是相同的。

代码 sn-p 如下所示,l_nRetVal 返回 0 表示成功。

    pthread_t thread_id = 0;
    struct sched_param  param_test;
    int l_nPolicy = -1;
    int l_nRetVal = -1;
char l_acMyPrio[20];

   memset( &param_test, 0, sizeof(param_test) );
   memset( l_acMyPrio, 0, sizeof(l_acMyPrio) );
   thread_id = pthread_self();
   l_nRetVal = pthread_getschedparam(thread_id, &l_nPolicy, &param_test);

问候 麦迪

【问题讨论】:

您是否在任何地方分配了优先级?如果不是,您期望它的价值是多少?您实际得到了什么? 旁注:you got the hungarian notation wrong。 It's good to mark a property of the variable, but bad to mark it's type. 您需要显示更多代码。不清楚你在设置什么,你在打印什么。 【参考方案1】:

您需要查看sched_param 结构的sched_curpriority 成员才能获取线程的当前优先级。获得与您设置的值相同的值是很正常的。您可能合理地期望不同值的原因: 1. 您使用的是零星调度策略; 2.线程正在处理通过MsgReceive()及其亲属接收到的消息; 3 线程持有一个互斥体并且具有更高优先级的线程被阻塞在同一个互斥体上。

一个示例(错误处理被修剪;第二个参数为 NULL 是 QNX 扩展):

   struct sched_param  param_test;

   pthread_getschedparam(pthread_self(), NULL, &param_test);
   printf("assigned_priority=%d; current_priority=%d\n", param_test.sched_priority, param_test.sched_curpriority);

QNX 文档中的另一个示例:http://www.qnx.com/developers/docs/6.5.0_sp1/topic/com.qnx.doc.neutrino_lib_ref/s/sched_param.html

【讨论】:

以上是关于如何在 QNX 中找到线程的当前优先级的主要内容,如果未能解决你的问题,请参考以下文章

[QNX 自适应分区用户指南]7 临界线程

[QNX 自适应分区用户指南]5.2 如何在分区之间分配CPU时间?

[QNX 自适应分区用户指南]6 分区继承

[QNX 自适应分区用户指南]8 自适应分区线程调度器和其他线程调度器

[实践篇]13.4 QNX侧如何查看进程信息?

[QNX 自适应分区用户指南]1.3.2 系统架构 - 处理设计复杂度