Стек и очередь. - C#
Формулировка задачи:
Нахожусь в процессе написании программы. И из головы совсем вылетело как правильно написать.
Вот задание если надо:
Система состоит из двух процессоров P1 и P2, двух стеков S1 и S2 и четырёх очередей F1, F2, F3, F4. В систему могут поступать запросы на выполнение задач двух приоритетов - высший (1) и низший (2). Задачи сначала обрабатываются последовательно процессором P1, затем P2.
Запросы на выполнение задач высшего приоритета, поступающие из генератора задач, ставятся в очередь F1, а поступающие с процессора P1 - в очередь F3. Запросы на выполнение задач низшего приоритета, поступающие с генератора задач, ставятся в очередь F2, а поступающие с процессора P1 - в очередь F4. Процессор P1 обрабатывает запросы из очередей F1 и F2, а процессор P2 - из очередей F3 и F4. Процессор сначала обрабатывает задачи из очереди задач с высшим приоритетом, затем из очереди задач с низшим приоритетом. Если процессор выполняет задачу с низшим приоритетом и приходит запрос на выполнение задачи с высшим приоритетом, то выполняемая задача помещается в соответствующий процессору стек, а пришедшая задача - в процессор. Задача из стека возвращается в процессор, если все задачи большего приоритета обработаны.
Как правильно написать, чтоб можно было сравнивать приоритет? Конкретно этот момент:
Вот ошибка: Ошибка 1 "System.Collections.Generic.List<programm>" не содержит определения для "priority" и не был найден метод расширения "priority", принимающий тип "System.Collections.Generic.List<programm>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) c:\users\levis\documents\visual studio 2010\Projects\SAOD_3\SAOD_3\CodeFile1.cs 50 22 SAOD_3
Так же вопрос, как реализовать выполнение программы по тактам?
if (prog.priority == 1) // что не так?? как надо сделать?
{
queue_1.Enqueue(prog[i]);
}
else
{
queue_2.Enqueue(prog[i]);
}using System;
using System.Collections;
using System.Collections.Generic;
struct programm
{
private string name;
private int priority;
private int time;
public programm(string n, int p, int t)
{
name = n;
priority = p;
time = t;
}
}
class process
{
static public void list_prmm(out List<programm> prog, out int num)
{
prog = new List<programm>();
string n1;
int p1, t1;
Console.WriteLine("Введите количество задач: ");
num = Int32.Parse(Console.ReadLine());
Console.WriteLine("Введите хорактеристики задач");
for (int i = 0; i < num; i++)
{
Console.WriteLine("Введите имя задачи " + (i+1) + ":");
n1 = Console.ReadLine();
Console.WriteLine("Введите время выполнения задачи " + (i + 1) + ":");
t1 = Int32.Parse(Console.ReadLine());
Console.WriteLine("Введите приоритет задачи (высший (1) или низший (2))" + (i + 1) + ":");
p1 = Int32.Parse(Console.ReadLine());
programm prog_temp = new programm(n1,p1,t1);
prog.Add(prog_temp);
Console.Clear();
}
}
static public void Queue(List<programm> prog,int num)
{
Queue queue_1 = new Queue();
Queue queue_2 = new Queue();
for (int i = 0; i < num; i++)
{
if (prog.priority == 1) // что не так?? как надо сделать?
{
queue_1.Enqueue(prog[i]);
}
else
{
queue_2.Enqueue(prog[i]);
}
}
}
static void Main()
{
int num;
List<programm> prog;
list_prmm(out prog, out num);
}
}
up!!!
Решение задачи: «Стек и очередь.»
textual
Листинг программы
while(prog.Count>0)
{
/// код для распределения процессов в стек или на процессоры
System.Threading.Thread.Sleep(1000); // Время паузы в мсек
}