Мне сложно реализовать логику параллельной разработки, основанную на теории операционных систем. Я не знаю, как погрузиться в свою работу, чтобы завершить ее в правильном решении, я знаю, что это когда-либо будет класс Monitor, основной класс, который аналогичен Thread0 или процессу Father в потоке, но для управления потоками, которые одновременно, чтобы предоставить доступ к ресурсу Shered, я столкнулся с некоторой проблемой. Рассмотрим пример возможного использования:
В природном парке есть несколько природных троп, по которым можно ездить на велосипеде. Для этого действует бесплатная услуга проката велосипедов, доступная для посетителей парка. В прокате пользователям предоставляется набор из N велосипедов, эквивалентных друг другу; велосипеды можно получить (с залогом 10 евро за велосипед) и вернуть на 3 станциях (A, B, C).
Каждая станция:
Имеет ограниченную вместимость парковки для велосипедов, равную Max (которая выражает максимальное количество велосипедов, которые можно оставить на станции), за пределами которой невозможно припарковать дополнительные велосипеды;
Оборудован собственный кассовый аппарат, куда вносятся денежные депозиты за велосипеды, полученные на станции.
В частности, существует два типа пользователей услуги:
Одинокие: доступ к прокат, чтобы получить только один велосипед за раз.
Пары посетителей: войдите в прокат, чтобы получить два велосипеда одновременно.
Каждый пользователь проката (один или пара) будет вести себя следующим образом:
Запросит желаемый велосипед/ы на начальной станции (A, B или C) и одновременно заплатит залог в размере 10 евро/велосипед;
Будет использовать велосипед/ы на произвольное время;
Вернет велосипед/ы на любой станции прибытия (A, B или C) и при этом получит возврат внесенного залога (10 евро/велосипед); в случае, если в кассе станции прибытия недостаточно суммы для возврата, пользователь ждет.
Для управления прокатом разработать параллельное приложение на Java на основе монитора, в котором работают пользователи представлены отдельными нитями.
Политика должна учитывать все указанные ограничения, а также:
Для приобретения велосипедов, приоритет придется отдавать одиноким пользователям.
Что касается возврата велосипедов, приоритет придется отдавать парам.
У кого-нибудь были идеи по поводу управления entrQueues( ) и waitQueues() со всеми условиями и сигналами? Ах, я помню, что это может быть написано на Java
Это моя проблема с фокусировкой, я должен создать класс, очень похожий на этот; но я не знаю, как адаптировать это в моем случае:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Monitor {
// costanti:
private final int IN=0;
private final int OUT=1;
//variabili di stato della sala:
private boolean PresenzaUsc=false; //Usciere Presente
private boolean ClosingMeeting=false; // riunione terminata (settato da usciere a fine riunione)
private int VisIN=0; //visitatori IN SALA
private int DipIn=0; // dipendenti in SALA (comprende anche l'Usciere)
private int N; //capacità sala
//sincronizzazione:
private Lock lock;
private Condition []codaU=new Condition[2]; //attesa Usciere [IN, OUT]
private Condition codaD; //attesa dipendenti
private Condition codaV; //attesa visitatori
private int []sospU=new int[2]; //usciere in attesa [IN, OUT]
private int sospD=0; //dipendenti in attesa
private int sospV=0; //visitatori in attesa
public Monitor(int N) {
this.N = N;
lock = new ReentrantLock();
for (int i=0; i0)
codaV.signalAll();
System.out.println("Usciere " + Thread.currentThread().getId() + " è uscito dalla sala: riunione conclusa");
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void EntraSalaVis() {
lock.lock();
try {
while( PresenzaUsc || VisIN==N || sospU[IN]>0 || sospD>0) {
sospV++;
codaV.await();
sospV--;
}
VisIN++;
System.out.println("Visitatore " + Thread.currentThread().getId() + " è entrato in sala");
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void EsceSalaVis() {
lock.lock();
try {
VisIN--;
if (VisIN==0 && sospU[IN]>0) // l'ultimo visitatore sblocca l'usciere in entrata
codaU[IN].signal();
System.out.println("Visitatore " + Thread.currentThread().getId() + " è uscito dalla sala");
}finally {
lock.unlock();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... read-class
Как использовать монитор из класса Java Thread [закрыто] ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1720454858
Anonymous
Мне сложно реализовать логику параллельной разработки, основанную на теории операционных систем. Я не знаю, как погрузиться в свою работу, чтобы завершить ее в правильном решении, я знаю, что это когда-либо будет класс Monitor, основной класс, который аналогичен Thread0 или процессу Father в потоке, но для управления потоками, которые одновременно, чтобы предоставить доступ к ресурсу Shered, я столкнулся с некоторой проблемой. Рассмотрим пример возможного использования:
В природном парке есть несколько природных троп, по которым можно ездить на велосипеде. Для этого действует бесплатная услуга проката велосипедов, доступная для посетителей парка. В прокате пользователям предоставляется набор из N велосипедов, эквивалентных друг другу; велосипеды можно получить (с залогом 10 евро за велосипед) и вернуть на 3 станциях (A, B, C).
Каждая станция:
Имеет ограниченную вместимость парковки для велосипедов, равную Max (которая выражает максимальное количество велосипедов, которые можно оставить на станции), за пределами которой невозможно припарковать дополнительные велосипеды;
Оборудован собственный кассовый аппарат, куда вносятся денежные депозиты за велосипеды, полученные на станции.
В частности, существует два типа пользователей услуги:
Одинокие: доступ к прокат, чтобы получить только один велосипед за раз.
Пары посетителей: войдите в прокат, чтобы получить два велосипеда одновременно.
Каждый пользователь проката (один или пара) будет вести себя следующим образом:
Запросит желаемый велосипед/ы на начальной станции (A, B или C) и одновременно заплатит залог в размере 10 евро/велосипед;
Будет использовать велосипед/ы на произвольное время;
Вернет велосипед/ы на любой станции прибытия (A, B или C) и при этом получит возврат внесенного залога (10 евро/велосипед); в случае, если в кассе станции прибытия недостаточно суммы для возврата, пользователь ждет.
Для управления прокатом разработать параллельное приложение на Java на основе монитора, в котором работают пользователи представлены отдельными нитями.
Политика должна учитывать все указанные ограничения, а также:
Для приобретения велосипедов, приоритет придется отдавать одиноким пользователям.
Что касается возврата велосипедов, приоритет придется отдавать парам.
У кого-нибудь были идеи по поводу управления entrQueues( ) и waitQueues() со всеми условиями и сигналами? Ах, я помню, что это может быть написано на Java
Это моя проблема с фокусировкой, я должен создать класс, очень похожий на этот; но я не знаю, как адаптировать это в моем случае:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Monitor {
// costanti:
private final int IN=0;
private final int OUT=1;
//variabili di stato della sala:
private boolean PresenzaUsc=false; //Usciere Presente
private boolean ClosingMeeting=false; // riunione terminata (settato da usciere a fine riunione)
private int VisIN=0; //visitatori IN SALA
private int DipIn=0; // dipendenti in SALA (comprende anche l'Usciere)
private int N; //capacità sala
//sincronizzazione:
private Lock lock;
private Condition []codaU=new Condition[2]; //attesa Usciere [IN, OUT]
private Condition codaD; //attesa dipendenti
private Condition codaV; //attesa visitatori
private int []sospU=new int[2]; //usciere in attesa [IN, OUT]
private int sospD=0; //dipendenti in attesa
private int sospV=0; //visitatori in attesa
public Monitor(int N) {
this.N = N;
lock = new ReentrantLock();
for (int i=0; i0)
codaV.signalAll();
System.out.println("Usciere " + Thread.currentThread().getId() + " è uscito dalla sala: riunione conclusa");
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void EntraSalaVis() {
lock.lock();
try {
while( PresenzaUsc || VisIN==N || sospU[IN]>0 || sospD>0) {
sospV++;
codaV.await();
sospV--;
}
VisIN++;
System.out.println("Visitatore " + Thread.currentThread().getId() + " è entrato in sala");
}catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void EsceSalaVis() {
lock.lock();
try {
VisIN--;
if (VisIN==0 && sospU[IN]>0) // l'ultimo visitatore sblocca l'usciere in entrata
codaU[IN].signal();
System.out.println("Visitatore " + Thread.currentThread().getId() + " è uscito dalla sala");
}finally {
lock.unlock();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78721906/how-to-use-monitor-from-java-thread-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия