Ho un'applicazione a thread singolo. Se io uso sotto il codice, ottengo sched_setscheduler(): Operation not permitted
.modifica priorità thread e scheduler in linux
struct sched_param param;
param.sched_priority = 1;
if (sched_setscheduler(getpid(), SCHED_RR, ¶m))
printf(stderr, "sched_setscheduler(): %s\n", strerror(errno));
Ma, se uso pthread api come di seguito, non ottengo un errore. Qual è la differenza tra i due per un'applicazione a thread singolo e la funzione di sotto sta cambiando davvero lo scheduler e la priorità o mi manca qualche gestione degli errori?
void assignRRPriority(int tPriority)
{
int policy;
struct sched_param param;
pthread_getschedparam(pthread_self(), &policy, ¶m);
param.sched_priority = tPriority;
if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m))
printf("error while setting thread priority to %d", tPriority);
}
1. Ho collegato l'applicazione con -lpthread. 2. ulimit -r mostra 0. quindi come spiega che sono in grado di chiamare la funzione assignRRPriority con il valore di 80. Perché non si verifica un errore? – Jimm
'-lpthread' non è sufficiente,' -pthread' è richiesto (per _both_ compiling _and_ linking). Quindi assegnareRRPriority fallirà. –