Здесь я пытаюсь создать два потока, назначить им приоритеты / политики и получить ожидаемое поведение.
Ожидаемое поведение: поток с наивысшим приоритетом (в данном случае поток1) должен выполняться всегда первым,Что я вижу: вывод потока смешивается, что означает, что приоритет не соблюдается.
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sched.h>
void *thread_func1 ();
void *thread_func2 ();
int main (){
pthread_t thread1, thread2;
pthread_attr_t attr1, attr2;
struct sched_param param1, param2;
int thread1_prio = 70;
int thread2_prio = 69;
int policy1, policy2;
policy1 = SCHED_RR;
policy2 = SCHED_RR;
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
param1.sched_priority = thread1_prio;
param2.sched_priority = thread2_prio;
pthread_attr_setschedparam(&attr1, ¶m1);
pthread_attr_setschedparam(&attr2, ¶m2);
pthread_attr_setschedpolicy(&attr1, policy1);
pthread_attr_setschedpolicy(&attr2, policy2);
pthread_attr_getschedparam(&attr1, ¶m1);
pthread_attr_getschedparam(&attr2, ¶m2);
pthread_attr_getschedpolicy(&attr1, &policy1);
pthread_attr_getschedpolicy(&attr2, &policy2);
pthread_create(&thread1, &attr1, thread_func1, NULL);
pthread_create(&thread2, &attr2, thread_func2, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
void *thread_func1 (void *var){
for (int i = 0; i<5; i++){
printf("Thread: 1\n");
}
return 0;
}
void *thread_func2 (void *var){
for (int i=0; i<5; i++){
printf("Thread: 2\n");
}
return 0;
}
- Я также пытался использовать
pthread_setschedprio
, все еще не смог получить ожидаемый результат. - Выполнение программы как
root
До публикации этого вопроса я пытался следить за многими постами / примерами, но в итоге все больше запутался. Любая помощь приветствуется.
Редактировать: Разве это не был настоящий вопрос? Я имею в виду, пожалуйста, поправьте меня, если это было глупо, чтобы опубликовать это и заслуживают отрицательных голосов, как некоторые из вас уже проголосовали против?