Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
35 / 35 / 21
Регистрация: 25.07.2015
Сообщений: 167

Получение приоритетов потоков

01.12.2018, 16:09. Показов 2853. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть задача:
Напишите программу, создающую два-три потока, сообщающую приоритеты этих потоков
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
 
void * thread_func(void *arg) {
    int loc_id = * (int *) arg;
 
    for (int i = 0; i < 1; i++) {
        printf("Thread %i is running\n", loc_id);
        sleep(1);
    } 
}
int main(int argc, char * argv[]) {
 
int id1, id2, result;
pthread_t thread1, thread2;
 
struct sched_param param1, param2;
int priority1, priority2;
int policy1, policy2;
int res1, res2;
 
id1 = 1; 
result = pthread_create(&thread1, NULL, thread_func, &id1);
 
res1 = pthread_getschedparam(thread1, &policy1, &param1);
priority1 = param1.sched_priority;
printf("pr1 = %d\n", priority1);
 
if (result != 0) {
    perror("Creating the first thread");
    return EXIT_FAILURE;
}
 
id2 = 2;
result = pthread_create(&thread2, NULL, thread_func, &id2);
 
res2 = pthread_getschedparam(thread2, &policy2, &param2);
priority2 = param2.sched_priority;
printf("pr2 = %d\n", priority2);
 
if (result != 0) {
    perror("Creating the second thread");
    return EXIT_FAILURE;
}
 
result = pthread_join(thread1, NULL);
 
if (result != 0) {
    perror("Joining the first thread");
    return EXIT_FAILURE;
}
 
result = pthread_join(thread2, NULL);
 
if (result != 0) {
    perror("Joining the second thread");
    return EXIT_FAILURE;
}
 
 
return EXIT_SUCCESS;
}
С помощью строчек
C
1
2
3
res1 = pthread_getschedparam(thread1, &policy1, &param1);
priority1 = param1.sched_priority;
printf("pr1 = %d\n", priority1);
C
1
2
3
res2 = pthread_getschedparam(thread2, &policy2, &param2);
priority2 = param2.sched_priority;
printf("pr2 = %d\n", priority2);
пытаюсь получить приоритеты первого и второго потока соответственно. Но получаю отрицательные результаты.

Могли бы Вы подсказать, как правильно нужно создать несколько потоков и вывести их приоритеты.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2018, 16:09
Ответы с готовыми решениями:

Получение WebResponce'ов в несколько потоков
Есть некое приложение, которое берет из очереди данные, которые надо проверить в интернете. Выглядит это примерно так: public...

Сортировка приоритетов
Доброго времени суток у меня задача реализовать класс в котором у нас есть очередь и реализовать класс который,будет сортировать эту...

Учет приоритетов операций в калькуляторе
Здравствуйте, я пишу курсовую роботу в Delphi, а именно калькулятор. Никак не могу решить проблему: калькулятор считает без учета...

7
 Аватар для weterok
36 / 28 / 9
Регистрация: 11.11.2018
Сообщений: 163
01.12.2018, 16:22
может поток еще не создался. если usleep(1000) скажем поставить.

Добавлено через 5 минут
и, кстати, в вашей функции потока поток завершается после проворачивания цикла. не лучше ли сделать
C
1
2
3
4
while(1){
//тело
usleep(120);
}
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
01.12.2018, 16:42
В общем-то у вас все нормально кроме последовательности pthread_create() + использование pthread_t + проверка а создана ли нить.
Просто дефолтный шедулер не имеет приоритетов и код должен показывать нули.
0
35 / 35 / 21
Регистрация: 25.07.2015
Сообщений: 167
01.12.2018, 18:51  [ТС]
prik,
Цитата Сообщение от prik Посмотреть сообщение
В общем-то у вас все нормально кроме последовательности pthread_create() + использование pthread_t + проверка а создана ли нить.
Просто дефолтный шедулер не имеет приоритетов и код должен показывать нули.
Да, нули тоже получал. Как можно получить отличные от нуля значения?

Добавлено через 51 минуту
weterok, может быть Вы могли бы помочь? Как можно получить отличные от нуля значения?
0
 Аватар для weterok
36 / 28 / 9
Регистрация: 11.11.2018
Сообщений: 163
01.12.2018, 22:46
https://docs.oracle.com/cd/E19... index.html
может это подойдет
0
35 / 35 / 21
Регистрация: 25.07.2015
Сообщений: 167
02.12.2018, 04:41  [ТС]
weterok, хм, в примере устанавливают приоритет самостоятельно. Получается, что по-другому получить приоритет, не устанавливая его самому, не получится?

Добавлено через 4 часа 49 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Напишите программу, создающую два-три потока,
сообщающую приоритеты этих потоков
*/
 
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
 
void * thread_func(void *arg) {
    int loc_id = * (int *) arg;
 
    for (int i = 0; i < 1; i++) {
        printf("Thread %i is running\n", loc_id);
        sleep(1);
    } 
}
int main(int argc, char * argv[]) {
 
    int id1, id2, result;
    pthread_t thread1, thread2;
    pthread_attr_t attr1, attr2;
    struct sched_param param1, param2;
    int priority1, priority2;
    int policy1, policy2;
    int newprio1 = 20, newprio2 = 30;
    
    pthread_attr_init(&attr1);
    pthread_attr_getschedparam(&attr1, &param1);
    param1.sched_priority = newprio1;
    pthread_attr_setschedparam (&attr1, &param1);
    result = pthread_create(&thread1, &attr1, thread_func, &id1);
 
    if (result != 0) {
        perror("Creating the first thread");
        return EXIT_FAILURE;
    }
 
    priority1 = param1.sched_priority;
    printf("Thread #1 priority = %d\n", priority1);
 
    id2 = 2;
    pthread_attr_init(&attr2);
    pthread_attr_getschedparam(&attr2, &param2);
    param2.sched_priority = newprio2;
    pthread_attr_setschedparam (&attr2, &param2);
    result = pthread_create(&thread2, &attr2, thread_func, &id2);
 
    if (result != 0) {
        perror("Creating the second thread");
        return EXIT_FAILURE;
    }
 
    priority2 = param2.sched_priority;
    printf("Thread #2 priority = %d\n", priority2);
 
    return 0;
}
На данный момент программа работает, но я устанавливаю приоритеты самостоятельно. Можно ли как-то избежать этого, установив приоритеты автоматически при создании потоков?
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
02.12.2018, 10:00
Цитата Сообщение от Teshuhack Посмотреть сообщение
На данный момент программа работает, но я устанавливаю приоритеты самостоятельно.
Я вам уже писал, что бы приоритеты работали нужно поменять шедулер.
Цитата Сообщение от Teshuhack Посмотреть сообщение
Можно ли как-то избежать этого, установив приоритеты автоматически при создании потоков?
Ну вы же и так пытаетесь ставить приоритет до создания потока, а не из самой нити. т.е. нить как-раз и запускается с нужным (но не работающим) приоритетом.
Если же вопрос в том как заставить систему делать это за вас - никак, откуда ей знать какая нить должна получать приоритеты.
1
 Аватар для weterok
36 / 28 / 9
Регистрация: 11.11.2018
Сообщений: 163
02.12.2018, 17:21
Цитата Сообщение от Teshuhack Посмотреть сообщение
result = pthread_create(&thread1, &attr1, thread_func, &id1);
Поток создается вот тут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2018, 17:21
Помогаю со студенческими работами здесь

Пропала загрузка UEFI из приоритетов
Есть а Asus B85M-G при первом запуске в блоке &quot;Приоритеты загрузки&quot; был блок UEFI, после установки Ubuntu(на жестком диске затер все...

Изменение приоритетов прерываний в Atmega328p
Столкнулся с проблемой которая требует чтобы текущий обработчик прерывания отработал без прерывания своей работы более высокоприоритетным...

PIC: Смена приоритетов прерываний на лету
Добрый день. Вопрос ни столько к PIC-ам, а так, к &quot;общей теории программируемости&quot; (то-бишь к алгоритмам), не стоит...

Ищу программу для установки приоритетов
Ищу программу для установки приоритетов на распределение интернет канала, т.е чтобы приоритет был на мой компьютер, т.к на других обычно...

Помогите составить порядок приоритетов (действий)
Помогите составить порядок приоритетов(действий), знаю что их должно быть 22, но у меня не верно помогите найти ошибку!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru