gpt4 book ai didi

c++ - pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:24 25 4
gpt4 key购买 nike

我是线程编程的新手。因此,对于这个看似愚蠢的问题,我深表歉意。

我正在尝试使用 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 优先级开始。我不明白为什么会这样。我正在打印的所有日志消息都符合预期,似乎没有错误。谁能指出我在代码中做错了什么?

谢谢!!!!

编辑:

我好像发现了一个有趣的事情,创建线程的时候无法设置线程的优先级。但是我可以在创建线程后更改线程的优先级。我使用 API pthread_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.

关于c++ - pthread_create 无法与 pthread_attr_setschedparam 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com