Probleme mit Thread-Prioritäten
Posted: 29. Feb 2012 14:09
Ich habe hier ein seltsames Problem. Ich erzeuge einen Thread, merke mir dessen Handle um dann aus dem Thread heraus die Priorität selbigens zu erhöhen. Allerdings führt das manchmal dazu, dass pthread_getschedparam() bis in alle Ewigkeit blockiert. Ich nehme also an, dass ich irgend was ganz grundsätzlich falsch mache.
Erzeugen meines Threads:
Das zurückgegebene "thread" wird anschließend als "handle" beim Setzen der Priorität verwendet:
Was könnte hier falsch sein? "thread" bzw. "handle" behalten immer den gleichen, bei der Threaderzeugung gesetzten Wert, es gibt also keinen Speicherschreiber, der mir das Handle verbiegt...
Erzeugen meines Threads:
Code: Select all
pthread_t *thread;
pthread_attr_t attr;
int ret;
thread=(pthread_t*)malloc(sizeof(pthread_t));
if (!thread) return NULL;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
ret=pthread_create(thread,&attr,start_routine,arg);
if (ret==0) return thread;
Code: Select all
sched_param param;
int policy,range;
if (pthread_getschedparam((pthread_t)handle, &policy, ¶m)!=0) return false;
range=(sched_get_priority_max(policy)-sched_get_priority_min(policy))-2; // get the range but never use the absolute max/min values
param.sched_priority=(range/5)*(prio+2)+1;
return (pthread_setschedparam((pthread_t)handle, policy, ¶m)==0);