分享| 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 1pthread_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));}#endifret=pthread_create(&id,&attr,(void *)a,NULL);printf("ret=%d\n",ret);if (ret){printf("pthread_create:%s\n",strerror(ret));}}
1 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
我也碰到同樣的問題,我把這一行pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);//注釋掉
就好了,而且attr中的屬性值也設置到線程里去了。
如果不注釋的話,就換成ROOT用戶執行,因為修改線程調度策略需要超級用戶。
添加回答
舉報
0/150
提交
取消