[Закрыть]
 
popoff.donetsk.ua
Лишь истинно сильный и уверенный в себе человек не побоится продемонстрировать свою зависимость от других людей.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Основы программирования и алгоритмические языки - Синхронизация на семафорах

Синхронизация на семафорах

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Гость CV url://forum.message:2913
Синхронизация на семафорах
CV

Приветствую. Пожалуйста помогите с теорией. Вот дали теоретическую задачку.
Есть три процесса X, Y, Z и три ресурса: R1 –устройство ввода, R2 – устройство печати, R3 – диск. Процесс X требует ресурсы R1 и R2, процесс Y – R2 и R3, процесс Z – R1 и R3. Скорости процессов разные. Процессы переходят из активного состояния в пассивное произвольным образом.

Я так подозреваю что нужно использовать 3 семафора принимающих значение открыт и закрыт или лучше один? но принимающий разные значения?
Т.е получается имеется 3 процесса X Y Z и если я хочу использовать 3 семафора мне нужно их создать например S1 S2 S3

Т.е если это все превратить в подобие псевдокода то получиться чтото вроде этого

var S1,S2,S3: semaphore

procedure procX
begin
  блокировать семафор S1
  блокировать семафор S2
  произвести чтение из устройства ввода(R1) и записывает в устройство вывода(R2)
  снять блокировку с S2
  снять блокировку с S1
end;

procedure procY
begin
  блокировать семафор S2
  блокировать семафор S3
  произвести чтение c диска(R3) и направить на принтер(R2)
  снять блокировку с S3
  снять блокировку с S2
end;

procedure procZ
begin
  блокировать семафор S1
  блокировать семафор S3
  произвести чтение c устройства ввода(R1) и направить на диск(R3)
  снять блокировку с S3
  снять блокировку с S2
end;

(Может нужно добавить провреку состояния семафоров?)

Пожалуйста подскажите верно ли это или как мне лучше сделать?

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2914

1. Да, три семафора
2. Семафоры не принимают значения, а блокируются/разблокируются
3. Поэтому, значение семафора нельзя проверить
4. Псевдокод правдоподобный

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость CV url://forum.message:2915
CV

Ясно. А вот вписываться ли то что я «изобразил» в условие ...Скорости процессов разные. Процессы переходят из активного состояния в пассивное произвольным образом.
?

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2916

не понятно, что значит активное/пассивное состояние

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость CV url://forum.message:2917
CV

Полагаю это тоже самое что и ..Скорости процессов разные т.е получается что время работы каждого процесса может варьироваться. Тогда если я правильно понимаю активное состояние это тогда когда процесс работает т.е находится в критической ситуации( - занимает процессор?)ну и соответственно пассивное противоположность активному? Меня вот смущает то что по коду сверху они как бы просто кабы находятся в цикле т.е поле первого выполняется второй после второго третий затем опять первый. Или так и надо?

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2918

всё вроде правильно у Вас...

там только насчёт активности может не так немного быть:

  

блокировать семафор S2
  блокировать семафор S3
  если R2 или R3 не активен, то разблокировать оба семафора и выйти из процедуры
  произвести чтение c диска(R3) и направить на принтер(R2)
  снять блокировку с S3
  снять блокировку с S2

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Обмен электронных валют
money.dn.ua