| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Blue777 Gast
|
Verfasst am: 29. Feb 2012 14:09 Titel: Probleme mit Thread-Prioritäten |
|
|
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: |
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: |
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);
|
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 Gast
|
Verfasst am: 03. März 2012 17:42 Titel: |
|
|
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. |
|
| |
|
|
|
|