Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 16

Программная реализация простого бесприоритетного планировщика потоков

01.09.2017, 00:13. Показов 5107. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программная реализация простого бесприоритетного планировщика потоков.

Исходные данные:
- возможные состояния потоков: выполнение, ожидание, блокировка
- отрабатываемые события: создание нового потока, завершение активного потока, завершение кванта времени у активного потока, блокирование потока, разблокирование потока
- основная структура данных: массив дескрипторов потоков с двумя полями - идентификатор потока, состояние потока
- массив реализует простейшую очередь со сдвигом элементов при удалении
- язык реализации - любой по выбору: C/C++, C#, Java, Pascal/Delphi

Я прислал преподу код: с реальным созданием потоков.

Вот что ответил перепод:
"Нет, это совсем не то что требуется. Реальные потоки создавать не надо, достаточно продемонстрировать работу основной структуры - очереди потоков на основе массива. Программа должна отрабатывать с помощью простейшего меню все 5 событий, показывая состояние очереди после отработки каждого события. "

Помогите, я так понимаю, что нужно создать меню с созданием эмулятора таких потоков.
Возможно есть готовое решением. Выручайте.
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2017, 00:13
Ответы с готовыми решениями:

Программная реализация простого бесприоритетного планировщика потоков
Доброе утро всем! Нужна Ваша помощь в доработке. Была задача: Программная реализация простого бесприоритетного планировщика потоков. ...

Программная реализация очереди
Друзья, подскажите, почему не правильно работает программа, ругается на функцию EmptyQ программу надо запускать в консольном приложении в...

Программная реализация I2C.
Всем привет. Есть необходимость в реализации софтового I2C - Мастер и Слейв режимы. На руках есть две платы STM32F4-Dyscovery и куча...

48
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.09.2017, 17:24
Студворк — интернет-сервис помощи студентам
EpicSR, у меня заблокированные пропускаются циклом until head^.st<>4.
1
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
06.09.2017, 17:27
Цитата Сообщение от Constantin Cat Посмотреть сообщение
у меня заблокированные пропускаются циклом until head^.st<>4.
У препода не было претензий на счет этого, вот видишь такая путаница возникает когда все люди говорят по разному )
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.09.2017, 18:05
Цитата Сообщение от EpicSR Посмотреть сообщение
такая путаница возникает когда все люди говорят по разному
Если почитать Столлингса, то все приблизительно так:
Миниатюры
Программная реализация простого бесприоритетного планировщика потоков  
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.09.2017, 18:50
А если верить Таненбауму, то так, но у Столлингса, я думаю более полное, т.к. любое приложение система может прервать в любой момент.
Миниатюры
Программная реализация простого бесприоритетного планировщика потоков  
1
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2017, 19:22
Все предложенные тут реализации имеет мало общего с реальным менеджером задач в ОС.
Для примера приведу пример завершения потока из своей игрушки (рабочий на реальном железе).
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
bool TaskManager::TerminateThread(Thread* pThread)
{
    if(Thread::GetCurrent() != pThread)
    {
        SwitchTaskLock();
        if(Smp)
        {
            //проверить на других CPU -> IPI
            bool no_run;
            if(pThread->IsSleep())
                no_run = pThread->FindFromThreadList(Thread::ShedulerListIterator, &SleepThreadListHead);
            else if(!pThread->IsIdle())
                no_run = pThread->FindFromThreadList(Thread::ShedulerListIterator, &ActivityThreadsListHead);
            else
                no_run = pThread->FindFromThreadList(Thread::ShedulerListIterator, &IdleThreadsListHead);
            if(!no_run)
            {
                SmpTerminateThread = pThread;
                SystemApic::SendIPI(pThread->GetLastCpuId(), SMP_TASK_KILL_VECTOR);
                while(SmpTerminateThread != NULL)
                    CpuPause();
                SwitchTaskUnlock();
                return true;
            }
        }
        if(pThread->IsSleep())
            pThread->DeleteFromThreadList(Thread::ShedulerListIterator, &SleepThreadListHead);
        else if(!pThread->IsIdle())
            pThread->DeleteFromThreadList(Thread::ShedulerListIterator, &ActivityThreadsListHead);
        else
            pThread->DeleteFromThreadList(Thread::ShedulerListIterator, &IdleThreadsListHead);
        SystemThreadCounter--;
        ProcessTerminateThread(pThread);
        SwitchTaskUnlock();
    }
    else
        TerminateCurrentThread();
    return true;
}
Зы: RAII для тут не используется из-за того, что Unlock реально может освобождать другую блокировку (хотя конкретно в данной функции все работало бы правильно).
И 100 стоками кода тут не отделаться, поэтому что хочет препод от ТС для меня загадка.
1
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 16
09.09.2017, 17:07  [ТС]
Задача была не создавать реальный пп, а показать принцип работы на основе списка.
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
09.09.2017, 20:23
Цитата Сообщение от Runinterface Посмотреть сообщение
показать принцип работы на основе списка.
мдя... по-ходу у кого-то каша в голове... массив, список, очередь... это все разные структуры данных... Реально можно наказать эту шарагу на деньги (теоретически). Как вариант просто бежать, пока не поздно. Обычно в частных вузах уровень преподавания выше, а тут просто ниже плинтуса.
1
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
10.09.2017, 04:07
Цитата Сообщение от Runinterface Посмотреть сообщение
а показать принцип работы на основе списка.
А не покажешь. Принцип работы настоящего планировщика заключается совершенно не в списке (его можно построить и на других структурах данных).
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
10.09.2017, 10:06
Цитата Сообщение от vlisp Посмотреть сообщение
Реально можно наказать эту шарагу на деньги (теоретически)
Не поделитесь опытом или знаниями?, У меня есть как бы док вещи такие как тесты которые составлены по конкретному учебному "пособию" а не по предмету обучения, ну и КУЧА заданий в духе построить автомобиль из веток и палок с помощью атомного ректора, вообщем чушь галимая.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2017, 10:06

CRC32, программная реализация
Привет! У кого нибудь есть пример программной реализации расчета crc32 по том же алгоритму, по котором она вычисляется аппаратно на...

Программная реализация процессора
Дано задание сделать программную реализацию процессора, кто-нибудь сталкивался с подобным, как это должно выглядеть, может у кого-нибудь...

Программная реализация номограммы
Сейчас пишу одну модель программно, в нее входят разные формулы для ее расчета, вбивать их конечно на С, не составляет никакого труда, но...

Программная реализация getchar
Добрый день! Никак не могу найти механизм работы функции getchar(). Суть в том, что нужно её использовать без подключенных...

Программная реализация дека
помогите пожалуйста!!! Программная реализация дека Указания: - использовать динамический массив - предусмотреть функции...


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru