serie La POSIX comprende pthread_setschedparam(3)
, come detto da varie altre risposte. Per lo più questa funzione della libreria di thread POSIX è menzionata quando si parla di thread in tempo reale, ma lo standard POSIX non limita il suo utilizzo esclusivamente al dominio dei thread in tempo reale. Tuttavia, in Linux il suo uso è davvero significativo solo se si utilizzano le classi di pianificazione in tempo reale SCHED_FIFO
o SCHED_RR
poiché solo quelle classi di pianificazione consentono più di un valore per il parametro di priorità. Vedi questo stack overflow answer per un'illustrazione.
Per fortuna o purtroppo, è una questione di prospettiva, sembra entrambe le implementazioni flusso principale libreria di thread Linux POSIX (i LinuxThreads obsoleti e l'attuazione NPTL corrente) non sono pienamente conforme a POSIX in quanto il "valore di nice" non è processo parametro specifico ma specifico del thread, quindi sembra che sia possibile utilizzare setpriority(3)
per modificare la niceness di un thread in Linux. Questo reclamo si basa sulle note di compatibilità nella pagina di manuale pthreads(7)
(cercare "un buon valore" in quella pagina); In realtà non ho provato in pratica (cosa semplice da fare).
Se si decide di utilizzare il modo POSIX di modificare la gradevolezza del thread, si noti che esiste la possibilità in agguato che qualcuno decida di correggere la non conformità menzionata, nel qual caso non sembra esserci alcun modo di cambiare il thread priorità in Linux se si utilizza la normale classe di pianificazione (SCHED_OTHER
).
Non è possibile passare un puntatore a una 'Non inizializzato pthread_attr_t' a' pthread_attr_getschedpolicy() '. – caf
@caf Grazie per il suggerimento. Ho aggiornato lo snippet di codice. –
Si noti che, sebbene lo standard POSIX (seguendo il collegamento dalla pagina di manuale 'phtread__setschedprio (3)' a http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html # tag_02_08_04_01) menziona usando 'pthread_setschedprio (3)' per i thread in esecuzione nella politica 'SCHED_OTHER', in Linux l'intervallo di valori per il valore di priorità è' [0, 0] 'rendendo questa risposta inutile per Linux, a meno che non venga modificata per l'uso reale classi di pianificazione temporale ('SCHED_FIFO' o' SCHED_RR') che non sono state richiamate dalla domanda. – FooF