Page 1 of 1

Probleme mit Thread-Prioritäten

Posted: 29. Feb 2012 14:09
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...

Posted: 03. Mar 2012 17:42
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.