Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
 Registrieren
    Profil      Private Nachrichten   Login
Probleme mit Thread-Prioritäten

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Blue777
Gast





BeitragVerfasst am: 29. Feb 2012 14:09   Titel: Probleme mit Thread-Prioritäten Antworten mit Zitat

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, &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
Gast





BeitragVerfasst am: 03. März 2012 17:42   Titel: Antworten mit Zitat

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.
 

Beiträge vom vorherigen Thema anzeigen:   
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy