|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.08.2017, 18:53 | #11 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Основная задача осепесателя придумать интерфейс для других программистов.
Интерфейс это структуры данных плюс имена функции и их параметры. Вы должны их выбрать так что-бы их имена говорили сами за себя. Само документированный код. А система потом получиться когда будете делать "прикладное" ПО. Чтобы создать планировщик Вы должны абстрагироваться от задачи, то есть выделить общие элементы. На самом деле за вас уже многое сделали и расживали в задание. Имена функциям за вас придумали имена состояниям тоже. Вам по сути остаётся только закодировать, что написано в задании. Но в тоже время эта не тупое задание. Вам предстоит ещё придумать алгоритм-планирования. Планирование это составление расписания, то бишь списка. Вам надо всего на всего придумать как у вас будет планироваться выполнение какие задачи первыми какие отложить на потом. Я вам предложил самый тривиальный способ в виде карусели.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
27.08.2017, 09:16 | #12 | |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Цитата:
Код:
К сожалению нас учать по пособиям что является полной чушью, это же не просто объявить массив и найти максимальный элемент. Я не намерен испортить знание по каким то пособиям, а намерен всеми правдами неправдами сделать задание на отмыш. Лучше я книжку почитаю потом по соответствующим темам, а сейчас время поджимает. Последний раз редактировалось goto ∞; 27.08.2017 в 09:30. |
|
27.08.2017, 11:25 | #13 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Очередь из потоков вроде бы правильно сделал. Можно добавить и извлечь, при извлечение элемента извлекаемый элемент удаляется. Удаляется, значит указатель больше не смотрит на извлеченный элемент.
Как двигаться дальше? |
27.08.2017, 13:23 | #14 | |||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Цитата:
Цитата:
С add тоже не всё в порядке, мы же добавляем. а тебя тут генерация! que[qnext].status := random(3); Неизвестные значения следует вынести в параметры. И вообще там должно быть дескриптор. queadd(value:TTheardDescriptor) Куда деть рендом? Когда пишешь программу ты должен мысленно разделить её на 3-части. Модель. Ввод/вывод. И управление. Вот в часть управления ты и должен написать тест для проверки очереди вот туда и следует пометить генерацию. А Write() тоже следует вынести отдельно. А в модели оставить только код ошибки. Мы же не знаем как будет сделан вывод в нашей ОС. Толи на консоль, толи в терминал будем выводить или же окошко кидать. А может и вовсе просто выставлять сигнал на тревожную линию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|||
29.08.2017, 10:35 | #15 | |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Цитата:
В параметрах поменял целочисленный тип на элемент потока. Насчет get или del, сути она не меняет. Как бы их не назвать он будет делать тоже самое. Мне не понятно последнее условие задачи, какая еще перестановка при удаление, переменная qindex всегда будет указывать на начало очереди, зачем что то переставлять. Если очередь из потоков у меня сделан то как реализовать следующие вещи? пункт 2-3 в условиях задачи? Код:
|
|
29.08.2017, 10:47 | #16 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Цитата:
гет должен "взять" поток, отдать его под управление, например, чтобы дать квант времени и убрать свои ручки от него а вот делете, должен удали поток, например, если он завершил свою работу Цитата:
|
||
29.08.2017, 10:51 | #17 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Какая еще середина потоков? Есть массив записей которая имитирует очередь из потоков, доступ в очередь только по "указателю"(переменная qindex) о чем мы вообще говорим.
|
29.08.2017, 10:59 | #18 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
1. У вас есть планировщик потоков. Прочтите, что это и чем он занимается.
2. У планировщика есть очередь потоков: 1 2 3 4 5 3. В процессе своей работы планировщик может удалить один из потоков из очереди, например, 3 и получить: 1 2 Х 4 5 Видите дырку? |
29.08.2017, 11:07 | #19 | |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Цитата:
Ведь массив записей которая имитирует очередь из потоков(поток в моем понимание это запись с двумя полями, id и статус). Когда планировщик что то хочет сделать то она обращается к очереди и когда она обращается к первому элементу это означает что она выбирает его и перемещает указатель на следующий элемент очереди. Значит пути назад нету, извлекаемый элемент потерян, нельзя просто написать qindex = qindex + 1, логический она противоречить понятию очередь. Иначе это просто массив к которой можно обращаться как угодно. Или я совсем тупой |
|
29.08.2017, 11:35 | #20 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Вы точно прочитали, что делает планировщик?
Вы теперь понимаете, что планировщик в простейшем случае берет поток из очереди, дает ему квант и снова отправляет поток в очередь? Теперь смотрим вашу очередь: *1 2 3 4 -> 1 *2 3 4 -> 1 2 *3 4 и т.д., т.к. это массив то мы можем просто двигать индекс-указатель не ворочая элементы. Теперь (по заданию! надо обработать завершение текущего потока): *1 2 3 4 -> 1 *2X 3 4 -> 1 X *3 4 -> 1 X 3 *4 = *4 1 X 3 видите дырку в вашей очереди? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Многократное использование потоков(пул потоков) | ProgrammistRT | Общие вопросы Delphi | 10 | 06.04.2014 13:42 |
FTP планировщик | Zloy_Doomer | Операционные системы общие вопросы | 0 | 21.05.2013 00:08 |
Планировщик | KolinRol | Помощь студентам | 1 | 15.04.2013 05:13 |
Планировщик на ассемблере | Spartiat | Помощь студентам | 0 | 04.06.2009 18:43 |
Планировщик процессов. | Артин | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 05.05.2009 23:21 |