Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2017, 13:46   #1
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию Планировщик потоков

Программная реализация простого бесприоритетного планировщика потоков.
Исходные данные:
- возможные состояния потоков: выполнение, ожидание, блокировка
- отрабатываемые события: создание нового потока, завершение активного потока, завершение кванта времени у активного потока, блокирование потока, разблокирование потока
- основная структура данных: массив дескрипторов потоков с двумя полями - идентификатор потока, состояние потока
- массив реализует простейшую очередь со сдвигом элементов при удалении


Очередь потоков сделали. Как примерно реализовать следующий пункт:

отрабатываемые события: создание нового потока, завершение активного потока, завершение кванта времени у активного потока, блокирование потока, разблокирование потока

Впервые сталкиваюсь с такой задачей и понятия даже нету как программно это сделать. Может кто либо помочь по этому пункту? Буду благодарен.

Код:

Program Potok2;

type
    descriptor = record
         id, status : integer;
    end;

const MAX = 4;


var
        que : array [0..MAX-1]of descriptor;
		i, qnext, qindex, qlength : integer;
		ck1,ck2:Boolean;
		Thead:descriptor;
		
		
		Procedure IqueInit;
begin
qnext := 0; qindex := qnext;
qlength:=0;
end;

  function queadd(eque : descriptor):boolean;
  begin
    queadd := true;
    if qlength <> MAX then
      begin
       que[qnext] := eque;
       inc(qnext);
	   inc(qlength);
	   if qnext = MAX then qnext := 0;
      end
    else queadd := false;
  end;

  function quedel(eque : descriptor):boolean;
  begin
    if qlength > 0 then
	 begin
	   inc(qindex);
	   if qindex = MAX then qindex := 0;
	   dec(qlength);
	   quedel := true;
	 end else quedel := false;
  end;

  

begin
qnext := 0; qindex := qnext;
qlength := 0;
end.
goto ∞ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Планировщик потоков goto ∞ Общие вопросы по программированию, компьютерный форум 36 30.08.2017 14:49
Многократное использование потоков(пул потоков) ProgrammistRT Общие вопросы Delphi 10 06.04.2014 13:42
Планировщик KolinRol Помощь студентам 1 15.04.2013 05:13
Планировщик событий Евгений_Магистр Общие вопросы Delphi 10 05.10.2012 23:19
Планировщик на ассемблере Spartiat Помощь студентам 0 04.06.2009 18:43