猿问

pthread_create函数返回1,也就是说创建线程失败了,这是哪里有问题,麻烦各位帮忙一下

分享| 22 分钟前150****9045 | 浏览 2 次
iWork编程语言 修改标签
#include<stdio.h>
#include<pthread.h>

void a(int a)
{

while(1)
{

printf("123\n");
sleep(1);
}
return; 

}

int main()
{
pthread_t id;
pthread_attr_t attr;
int ret,inher;
int policy=SCHED_FIFO;
struct sched_param param;
param.sched_priority=93;

pthread_attr_init(&attr);
ret=pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_attr_getinheritsched(&attr,&inher);
if(inher==PTHREAD_INHERIT_SCHED)
printf("can't change sched policy1\n");
else if(inher==PTHREAD_EXPLICIT_SCHED)
printf("can change sched policy1\n");

#if 1
pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);
pthread_attr_getinheritsched(&attr,&inher);
if(inher==PTHREAD_INHERIT_SCHED)
printf("can't change sched policy2\n");
else if(inher==PTHREAD_EXPLICIT_SCHED)
printf("can change sched policy2\n");

ret=pthread_attr_setschedpolicy(&attr,policy);
if (ret==0)
{
printf("set policy:%s\n",strerror(ret)); 
}

ret=pthread_attr_setschedparam(&attr,¶m);
if (ret==0)
{
printf("set param:%s\n",strerror(ret));
}
#endif

ret=pthread_create(&id,&attr,(void *)a,NULL);
printf("ret=%d\n",ret);
if (ret)
{
printf("pthread_create:%s\n",strerror(ret));

}

}

守候你守候我
浏览 537回答 1
1回答

江户川乱折腾

我也碰到同样的问题,我把这一行pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);//注释掉就好了,而且attr中的属性值也设置到线程里去了。如果不注释的话,就换成ROOT用户执行,因为修改线程调度策略需要超级用户。
随时随地看视频慕课网APP

相关分类

Python
我要回答