2011-10-07 8 views
16

La página del manual para nice dice "agradable() añade inc al valor agradable para el proceso llamando Por lo tanto, podemos usarlo para cambiar el valor agradable para un hilo creado por pthread_createes bueno() usado para cambiar la prioridad del hilo o la prioridad del proceso?

EDIT:.? Parece que podemos establecer el buen valor por hilo.

Escribí una aplicación, estableciendo diferentes valores agradables para diferentes hilos, y observé que el hilo "más bonito" se había programado con menor prioridad. encontró que la cadena "alta prioridad ................" sale más frecuentemente.

void * thread_function1(void *arg) 
{ 

pid_t tid = syscall(SYS_gettid); 

int ret = setpriority(PRIO_PROCESS, tid, -10); 
printf("tid of high priority thread %d , %d\n",tid ,getpriority(PRIO_PROCESS,tid)); 
while(1){ 
    printf("high priority ................\n"); 
    } 

} 


void * thread_function(void *arg) 
{ 
pid_t tid = syscall(SYS_gettid); 
int ret = setpriority(PRIO_PROCESS, tid, 10); 
printf("tid of low priority thread %d , %d \n",tid ,getpriority(PRIO_PROCESS,tid)); 
while(1) 
{ 

    printf("lower priority\n"); 
} 
} 


int main() 
{ 

pthread_t id1; 
pthread_t id2; 

pid_t pid = getpid(); 
pid_t tid = syscall(SYS_gettid); 

printf("main thread : pid = %d , tid = %d \n" , pid, tid); 
pthread_create(&id1, NULL, thread_function1, NULL); 
pthread_create(&id2, NULL,thread_function, NULL); 

pthread_join(id1, NULL); 
pthread_join(id2, NULL); 


} 

Respuesta

21

El pthreads man page dice:

POSIX.1 también requiere que los hilos comparten una serie de otros atributos (es decir, estos atributos son en vez de por hilos amplia proceso):

[ ...]

  • buen valor (setpriority (2))

Por lo tanto, teóricamente, el valor de "bondad" es global para el proceso y compartido por todos los hilos, y no debería poder establecer una bondad específica para uno o más hilos individuales.

Sin embargo, la misma página el hombre también dice:

LinuxThreads

Las características notables de esta aplicación son los siguientes:

[...]

  • Los hilos no comparten un buen valor común.

NTPL

[...]

NTPL todavía tiene algunos no conformidades con POSIX.1:

  • hilos no comparten un valor común agradable.

Así que resulta que ambas implementaciones de roscado en Linux (LinuxThreads y NPTL) en realidad violan POSIX.1, y se puede establecer una amabilidad específico para uno o más hilos individuales pasando un tid a setpriority() en éstos sistemas.

+1

Pero, ¿por qué en alguna implementación de JVM, la prioridad de subprocesos de Java tiene un mapeo 1: 1 con el buen valor? //www.javamex.com/tutorials/threads/priority_whatshtml Además, escribí una aplicación, estableciendo una diferencia de buen valor para diferentes subprocesos, y observé que el subproceso más agradable se ha programado con menor prioridad comprobando la frecuencia de la salida. – pierrotlefou

+0

@pierr, interesante, resulta que ambos hilos NPTL y Linux violan POSIX.1. Actualizaré mi respuesta. –

+0

@ FrédéricHamidi ¿Sigue siendo el mismo caso que los hilos en Linux no comparten un buen valor común? – blueskin

Cuestiones relacionadas