standardem POSIX obejmuje pthread_setschedparam(3)
, jak wspomniano przez różne odpowiedzi. Najczęściej ta funkcja biblioteki wątków POSIX jest wymieniona podczas rozmowy o wątkach w czasie rzeczywistym, ale standard POSIX nie ogranicza wykorzystania wyłącznie do dziedziny wątków czasu rzeczywistego. Jednak w Linuksie jego użycie jest naprawdę znaczące tylko wtedy, gdy używa się klas planowania w czasie rzeczywistym SCHED_FIFO
lub SCHED_RR
, ponieważ tylko te klasy planowania dopuszczają więcej niż jedną wartość dla parametru priorytetu. Zobacz tę ilustrację na stronie stack overflow answer.
Na szczęście lub niestety jest to kwestia perspektywy, wydaje się, że zarówno główne strumienie Linux biblioteki POSIX implementacje wątków (przestarzałe LinuxThreads i obecna implementacja NPTL) nie są w pełni zgodne z POSIX, że "nice value" nie jest procesem specyficzny, ale specyficzny dla wątku parametr, więc wydaje się, że można użyć setpriority(3)
, aby zmienić adres wątku w systemie Linux. To roszczenie opiera się na uwagach dotyczących zgodności na stronie podręcznika pthreads(7)
(wyszukaj "niezłą wartość" na tej stronie); W rzeczywistości nie testowałem w praktyce (proste rzeczy do zrobienia).
Jeśli zdecydujesz się na użycie niezgodnego ze standardami POSIX sposobu zmiany nićmi wątku, zauważ, że istnieje możliwość, że ktoś zdecyduje się naprawić wspomniane niezgodności, w którym to przypadku wydaje się, że nie ma możliwości zmiany nici priorytet w Linuksie, jeśli używasz normalnej klasy planowania (SCHED_OTHER
).
Nie można przekazać wskaźnik do zainicjalizowana 'pthread_attr_t' do' pthread_attr_getschedpolicy() '. – caf
@ ca Dzięki za podpowiedź. Zaktualizowałem fragment kodu. –
Należy pamiętać, że chociaż standard POSIX (po odsyłaczu z podanej strony podręcznika 'phtread__setschedprio (3)' do http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html # tag_02_08_04_01) wspomina o użyciu 'pthread_setschedprio (3)' dla wątków działających w strategii 'SCHED_OTHER', w Linuksie zakres wartości dla wartości priorytetu wynosi' [0, 0] 'czyniąc tę odpowiedź bezużyteczną dla Linuksa, chyba że zostanie zmieniona na rzeczywistą klasy harmonogramów czasowych ('SCHED_FIFO' lub' SCHED_RR'), które nie są zadawane przez pytanie. – FooF