Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 05.04.2016, 11:23   #1
Exxodus
Новичок
Джуниор
 
Регистрация: 05.04.2016
Сообщений: 1
Вопрос Стек и очередь. Задачи никогда не попадают в стек - Delphi

Условие:
Система состоит из двух процессоров P1 и P2 и двух очередей F1, F2 и стека S. В систему могут поступать запросы на выполнение задач двух типов - Т1 и Т2. Задача типа Т1 может выполняться только процессором P1. Задача типа Т2 может выполняться любым процессором.

Поступающие запросы ставятся в соответствующие типам задач очереди. Если очередь F1 не пуста и процессор P1 свободен, то задача из очереди F1 поступает на обработку в процессор P1. Если процессор Р1 обрабатывает задачу типа Т2, а процессор Р2 свободен, то задача из процессора Р1 поступает в процессор Р2, а задача из очереди F1 в процессор Р1, если же процессор Р2 занят, то задача из процессора Р1 помещается в стек.
Если очередь F2 не пуста и процессор P2 свободен, то задача из очереди F2 поступает на обработку в процессор P2. Если процессор Р2 занят, а процессор Р1 свободен и очередь F1 пуста, то задача из очереди F2 поступает в процессор Р1, а задача из стека поступает на обработку в свободный процессор Р2, если F2 пуста, или в свободный процессор Р1, если очередь F1 пуста и задачу нельзя поместить в процессор Р2.



Дело в том, что ни одна задача никогда не попадает в стек. Настораживает последний абзац условия, может там косяк? Или я ошибаюсь? Прошу помочь по мере возможностей. сам проект на прикрепленке.
Вложения
Тип файла: zip Проект.zip (916.8 Кб, 11 просмотров)
Exxodus вне форума Ответить с цитированием
Старый 05.04.2016, 15:12   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,691
По умолчанию

Ошибки в переписывании условий. Например, здесь
Код:
//Если очередь F1 не пуста, процессор P1 обрабатывает задачу второго типа, а Р2 свободен, то из P1 задачу перебрасываем в P2, и на P1 добавляем задачу из очереди F1
   if ((not F1.IsEmpty) and (P1.Data.T=2) and (P2.IsFree)) then
Или здесь:
Код:
//Если очередь F1 пуста, P2 занят и стек не пуст, то из стека задача идет на процессор P1
     if ((F1.IsEmpty) and (P1.IsFree) and (not P2.IsFree) and (not S.IsEmpty)) then
       P1.AddRequest(S.Take);
поступает из стека в занятый процессор
0.jpg

Ещё время выполнения задач можно увеличить
Код:
Request.Name:='Task_'+IntToStr(i);
      Request.Time:=10+Random(10);
      Request.T:=1+Random(2);
иначе редко в стек что-то попадает

Возможно, это не все ошибки (только то, что попалось на глаза)
eoln вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек и очередь в Delphi Yustinka Помощь студентам 2 08.06.2015 16:00
Стек и очередь Кротяка Общие вопросы C/C++ 1 12.08.2014 18:51
Стек и очередь SsAn Паскаль, Turbo Pascal, PascalABC.NET 1 05.01.2014 13:24
Стек и очередь. (Delphi) Olgasato Помощь студентам 8 02.04.2010 08:08
Очередь, стек, дек в Delphi Katen'ka Помощь студентам 1 12.06.2009 22:23