posix pthreads priority festlegen



  • Hi,

    ich habe ein kleines Problem. Ich habe ein Programm was mehrere Threads hat und ua einen der UPD Pakete sammelt. Unter Umständen wird eine andere Thread so priorisiert das dass einsammeln der UDP Pakete unterbrochen wird. Jetzt will ich den UPC Selector Thread mit einer höheren Prio versehen. Aber wenn ich das mache sammelt er garnicht mehr! Wans mach ich falsch???

    // prio
    	pthread_attr_t tattr;
    	int iprio;
    	sched_param param;
    
    	/* set the priority; others are unchanged */
    	iprio = 30;
    	param.sched_priority = iprio;
    
    	/* set the new scheduling param */
    	pthread_attr_setschedparam (&tattr, &param);
    
    	// run threads
    	pthread_create(&statusChecker,	NULL,	statusCheckerThread,	(void*)this);
    	pthread_create(&interval,	NULL,	intervalThread,		(void*)this);
    	pthread_create(&selector,	&tattr,	selectorThread,		(void*)this);
    

    Habe einfach die Prio auf 30 erhöht. Wo sind die Grenzen -/+ von Prio -kann keine Angaben finden. Bin über alles Dankbar. Auch gute links fürs bessere Verstehen.

    Danke für eure Hilfe
    *ape





  • Hallo ape,

    Das Einstellen der Thread Prio mit der pthread scheint leider nicht so einfach zu gehen.
    Bitte prüfe unbedingt die return values der Funktionen.

    Grundsätzlich ist es normal das ein Thread oder auch ein Prozess unterbrochen wird. Das muss die Programmierung berücksichtigen,
    hier helfen auch keine Prioritäten, bzw.
    Du hast dann immer noch keine Garantie.

    Eine 'saubere' Implementierung kommt in der Regel ohne Thread Prioritäten aus,
    bzw. regelt die Prioritäten über events, mutexe und job queues.

    Theoretisch kann man natürlich einen Lock während des Empfangs setzen
    und verhindern das die anderen Threads während des Empfangs weiter arbeiten können.

    Wobei es spätestens hier schon komisch klingt und man sich gerne die Frage stellen kann: "Warum dann überhaupt threads verwenden?"

    Nur meine persönliche Meinung.

    Gruß Frank


Anmelden zum Antworten