pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

2023-12-08

我是线程编程的新手。所以我对这个看似愚蠢的问题表示歉意。

我正在尝试使用 pthread_attr_t 使用 pthread_create() 创建 POSIX 线程。我正在尝试设置 sched_priority 值并将其放入属性中。代码粘贴在下面:

#include <iostream>
#include <cstring>
#include <pthread.h>
using namespace std;

void* log(void* arg)
{

  FILE *fp = fopen("/tmp/log.txt", "w+");
   if (fp != NULL)
   {
     fputs("Logging with Thread", fp);
    }
   else
   {
    cout <<"file pointer not created" << endl;
   }
   return 0;
 }
int main(int argc, char** argv )
{

  pthread_t th;
  pthread_attr_t th_attr;
  int policy;
  struct sched_param thparam;
  memset(&thparam, 0,sizeof(sched_param));
  int retval = pthread_attr_init(&th_attr);
  if (0 != retval)
   {
     cout <<"Attribute initialization failed" << endl;
   }

  thparam.sched_priority = 10;

  int ret1 = pthread_attr_setschedparam(&th_attr, &thparam);
  if (0 == ret1)
  {
   cout <<"pthread_attr_setschedparam PASSED" << endl;
   } 

 int ret = pthread_create(&th, &th_attr, log, NULL);
 if (0 != ret)
  {
   cout <<"thread not created" << endl;      
  }
 else
  {
   cout <<"Thread created" << endl;
  }

  int retval1 = pthread_getschedparam(th, &policy, &thparam);
  if (0 != retval1)
  {
   cout <<"Inside Main::pthread_getschedparam FAILED at start" << endl;
  }
  else
  {
   cout <<"Inside Main::priority: " << thparam.sched_priority << endl;
   cout <<"Inside Main::sched policy: " << policy << endl;
  }
  pthread_join(th, NULL);

  return (0);
 }

每次我运行这个程序时,都会创建线程,但默认优先级(在我的例子中为 15)。由于我已将优先级设置为 10,所以它应该以 10 优先级开始。我不明白为什么会发生这种情况。我打印的所有日志消息都符合预期,似乎没有错误。 谁能指出我在代码中做错了什么?

谢谢!!!!

EDIT:

我似乎发现了一件有趣的事情。我无法在线程创建期间设置线程优先级。但我可以在创建线程后更改线程的优先级。我使用了APIpthread_setschedparam设置优先级。这次线程的优先级正确改变了。仍然无法理解为什么会发生这种情况。

我还应该提到,我正在使用带有 ARM arch 的嵌入式系统。我还将调度程序策略设置为 SCHED_RR。

有人可以解释一下为什么会发生这种情况吗?


从手册页:

   In order for the parameter setting made by
   pthread_attr_setschedparam() to have effect when calling
   pthread_create(3), the caller must use
   pthread_attr_setinheritsched(3) to set the inherit-scheduler
   attribute of the attributes object attr to PTHREAD_EXPLICIT_SCHED.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pthread_create 无法与 pthread_attr_setschedparam 一起正常工作 的相关文章

随机推荐

  • 如何在 Firestore 上以有限权限使用 Admin SDK?

    我在云功能和 Firestore 规则方面遇到一些问题 我想在 Firestore 上使用具有有限权限的云功能并给予 仅具有安全规则中定义的访问权限 它在 RTDB 上运行没有问题 但在 Firestore 上运行不正常 我尝试过这个规则
  • 各种编译器编译的链接库

    我想更详细地询问我最近在这里得到的答案 第三个 编译语言基础知识 如果我用 C 和 MinGW 编写并链接到 VC 编译的 C 库 它会工作吗 我如何提前知道 换句话说 如果我能够在没有警告的情况下创建链接到该 C dll 的 exe 并且
  • 如何捕获对话框外触摸时的事件?

    我的应用程序有一个对话框 我想在用户单击对话框外部时捕获事件 为此我需要做什么 谢谢大家 Dialog有setCanceledOnTouchOutside boolean 方法 如果您传递 true 作为参数 当您触摸窗口边界之外时 对话框
  • jquery datepicker + 日期差异计算

    这是我的代码 function arr date datepicker dateFormat dd mm yy dep date datepicker dateFormat dd mm yy function var start arr d
  • 如何编写 Firebase 规则以允许仅读取集合/文档的一部分? [复制]

    这个问题在这里已经有答案了 我正在使用 firebase firestore 开发一个网站 该网站向基于角色的用户显示文章 所以数据库保存了文章的集合 qlt0mPbTBt1rQcrx1HJR title Article 1 descrip
  • jQuery.parseJSON \u0092 字符未解析

    我有一个从 php 编码的文本 带有 ajax 函数和 de php utf8 encode 如果我直接在控制台中打印它 文本将显示如下 projects id 1 title CURSOS DE PERIODISME descriptio
  • 使用赋值作为条件表达式?

    考虑 if a 5 do something 任务作为条件如何发挥作用 它是基于左值的非零值吗 C ISO IEC 14882 2003 E 5 17 1 有几个赋值运算符 它们都组 右到左 全部都需要一个可修改的左值作为其左操作数 赋值表
  • 在 Angular Dart 组件中填充派生字段

    我有一个采用单个属性的组件 我想用从此属性派生的值填充组件中的字段 我遇到的问题是 当构造函数内的代码运行时 与属性的绑定尚未发生 那么 如何设置派生字段的值呢 这是一些代码 import package angular angular d
  • 是否可以使用pandas中的groupby来执行applymap?

    在 pandas Dataframe 中我想要applymap somefunction using groupby 使用一些列索引值 mcve 01 txt pos index M1 M2 F1 x 16230484 141 G G G
  • C# 中的联合 - 与非对象字段不正确对齐或重叠

    我通过 PInvoke 编组到本机 C dll 它需要以下调用 private static extern int externalMethod IntPtr Data MarshalAs UnmanagedType U4 ref int
  • Nifi:nifi 中的线程

    我想知道线程在 nifi 中如何工作 我的意思是一个处理器有一个线程还是它们在一个主线程中 也许我想从处理器获取一个文件 然后我想更新它 如何防止多个处理器同时获取文件数据 除了使用 keep file false 操作 是否可以在执行脚本
  • JavaScript 排序回调

    我需要对一大堆 Javascript 项目进行排序 我正在使用sort像这样的函数 var sorted list non sorted sort function a b Sort stuff here 我想做的是当sort功能完成 是否
  • 如何使用 UIImagePickerController 录制时使麦克风静音?

    我正在使用 UIImagePickerController 在我的应用程序之一中录制视频 我已成功录制视频 但现在我想在录制视频时将麦克风静音 没有音频的视频 我已经搜索了很多 但没有任何线索 请帮我解决这个问题 是否可能 如果可能的话 比
  • 隔离范围属性何时真正添加到范围中?

    我正在创建一些具有隔离范围和一些别名属性的指令 例如 scope prop1 我的问题是 这些别名到底什么时候添加到范围中 我遇到了一些问题 因为链接函数中未定义属性 运行这个 jsFiddle 后在控制台中查看 http jsfiddle
  • 导入 Math.PI 作为参考或值

    我正在准备 Java 基础认证 我对我正确的问题的答案感到有点困惑 Given public class Circle static double getCircumference double radius return PI 2 rad
  • 释放使用 initWithInteger 创建的 NSNumber 实例:与 numberWithInt:

    书中第326页Objective C 2 0 编程作者说 myNumber NSNumber alloc initWithInt 1000 当然 根据之前的讨论 如果您创建myNumber这样 当您使用完它后 您有责任通过如下语句随后释放它
  • 无法检测类 IllegalArgumentException

    同时从 eclipse 学习和探索 Java 9 我在 eclipse 中创建了一个简单的项目 虽然当我编译该项目时 它打印了程序的预期结果 但也出现了以下异常 Could not instrument class mymodule App
  • 如何在 LINQ 中按大小写排序

    我有这个答案实体框架 OrderBy CASE WHEN 但这只能处理两个选项 var p ctx People OrderBy p gt p IsQualityNetwork 1 p IsEmployee 1 0 1 ThenBy p g
  • 高效的 HTML Div,其中有漏洞

    让我多解释一下 我试图拥有一个大区域 全屏 其中有一个固定大小的孔 该孔将跟随鼠标在屏幕上移动 想象一下 将范围集中在页面上 而页面的其余部分呈灰色 我需要它在所有浏览器 包括 IE 6 中有效地工作 我当前的解决方案使用 4 个 div
  • pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

    我是线程编程的新手 所以我对这个看似愚蠢的问题表示歉意 我正在尝试使用 pthread attr t 使用 pthread create 创建 POSIX 线程 我正在尝试设置 sched priority 值并将其放入属性中 代码粘贴在下