Probleme mit Thread-Prioritäten

Post Reply
Message
Author
Blue777

Probleme mit Thread-Prioritäten

#1 Post by Blue777 »

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:

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;
Das zurückgegebene "thread" wird anschließend als "handle" beim Setzen der Priorität verwendet:

Code: Select all

   sched_param param;
   int         policy,range;

   if (pthread_getschedparam((pthread_t)handle, &policy, &param)!=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, &param)==0);
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...

Blue777

#2 Post by Blue777 »

OK, Problem gelöst:

pthread_getschedparam() erwartet als ersten Parameter ein pthread_t, ich habe aber pthread_t übergeben, so dass die funktion beim internen Lock auf irgend was zugegriffen hat und demzufolge natürlich für immer blockiert hat.

Post Reply