estándar POSIX El pthread_setschedparam(3)
incluye, como se ha mencionado por varias otras respuestas. En su mayoría, esta función de biblioteca de subprocesos POSIX se menciona cuando se habla de subprocesos en tiempo real, pero el estándar POSIX no limita su uso únicamente al dominio de subprocesos en tiempo real. Sin embargo, en Linux, su uso solo tiene sentido si se usan las clases de programación en tiempo real SCHED_FIFO
o SCHED_RR
, ya que solo esas clases de programación permiten más de un valor para el parámetro de prioridad. Vea esto stack overflow answer para una ilustración. Afortunada o desafortunadamente, es una cuestión de perspectiva, parece que las implementaciones de la biblioteca de hilos POSIX de Linux (las LinuxThreads obsoletas y la implementación actual de NPTL) no son completamente compatibles con POSIX porque el "buen valor" no es procesado parámetro específico pero específico del subproceso, por lo que parece que podría usar setpriority(3)
para cambiar la bondad de un hilo en Linux. Este reclamo se basa en las notas de compatibilidad en la página del manual pthreads(7)
(busque "buen valor" en esa página); En realidad, no he probado en la práctica (cosa sencilla que hacer).
En caso de que decida usar la forma incorrecta de POSIX de cambiar la amabilidad del hilo, tenga en cuenta que existe la posibilidad de que alguien decida corregir el incumplimiento mencionado, en cuyo caso parece que no hay forma de cambiar el hilo prioridad en Linux si usa una clase de programación normal (SCHED_OTHER
).
No se puede pasar un puntero a un '' pthread_attr_t' no inicializado a pthread_attr_getschedpolicy() '. – caf
@caf Gracias por la pista. He actualizado el fragmento de código. –
Tenga en cuenta que, aunque el estándar POSIX (siguiendo el enlace de la página de manual 'phtread__setschedprio (3)' proporcionada a http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html # tag_02_08_04_01) menciona 'pthread_setschedprio (3)' para hilos que se ejecutan en la política 'SCHED_OTHER', en Linux el rango de valores para el valor de prioridad es' [0, 0] 'haciendo que esta respuesta sea inútil para Linux, a menos que se cambie para usar las clases de programación de tiempo ('SCHED_FIFO' o' SCHED_RR') que no son llamadas por la pregunta. – FooF