2011-10-07 17 views
16

La pagina man per nice dice "bello() aggiunge inc al bel valore per il processo che chiama Quindi, possiamo utilizzarlo per modificare il valore bello per un thread creato da pthread_createè bello() utilizzato per modificare la priorità del thread o la priorità del processo?

EDIT:.? Sembra che possiamo impostare il valore per thread

Ho scritto un'applicazione, impostando un valore diverso per thread diversi e osservato che il thread "più bello" è stato programmato con priorità più bassa. trovato che la stringa "alta priorità ................" viene emessa più frequentemente

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); 


} 

risposta

21

Il pthreads man page dice:

POSIX.1 richiede inoltre che thread condividono una serie di altri attributi (cioè, questi attributi sono livello di processo piuttosto che per thread):

[ ...]

  • valore nice (setpriority (2))

Quindi, teoricamente, il valore di "gradevolezza" è globale per il processo e condiviso da tutti i thread e non si dovrebbe essere in grado di impostare una niceness specifica per uno o più thread singoli.

Tuttavia, la stessa pagina man dice anche:

LinuxThreads

Le caratteristiche notevoli di questa implementazione sono i seguenti:

[...]

  • I thread non condividono un valore piacevole comune.

NPTL

[...]

NPTL ha ancora un paio di non conformità con POSIX.1:

  • Le discussioni non condividono un valore bel comune.

Così si scopre che entrambi i threading implementazioni su Linux (Thread di Linux e NPTL) in realtà violano POSIX.1, ed è possibile impostare un niceness specifico per uno o più thread singoli passando un tid per setpriority() su queste sistemi.

+1

Ma perché in alcune implementazioni JVM, la priorità del thread java ha un mapping 1: 1 con il valore piacevole? //www.javamex.com/tutorials/threads/priority_what.shtml Inoltre, ho scritto un'applicazione, impostando un buon valore di differenza per thread diversi e osservato che il thread più bello è stato programmato con priorità più bassa verificando la frequenza dell'output. – pierrotlefou

+0

@pierr, interessante, risulta che sia i thread NPTL che quelli Linux violano POSIX.1. Aggiornerò la mia risposta –

+0

@ FrédéricHamidi È sempre lo stesso caso in cui i thread su Linux non condividono un buon valore comune? – blueskin

Problemi correlati