Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Sergio131313
3 / 3 / 1
Регистрация: 14.09.2014
Сообщений: 88
#1

Задача об обедающих философах. Повторное выполнение потока в Android - Программирование Android

05.12.2016, 18:25. Просмотров 312. Ответов 0

Добрый день. Пытаюсь реализовать задачу об обедающих философах на Java под Android. Реализовать необходимо используя семафоры. Текущий исходный код приведен ниже.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class Philosopher extends Thread implements Fork {
    String name;
    int indexOfForkLeft;
    int indexOfForkRight;
 
 
public Philosopher(String name,  int indexOfForkLeft, int indexOfForkRight) {
    this.name = name;
    this.indexOfForkLeft = indexOfForkLeft;
    this.indexOfForkRight = indexOfForkRight;
}
 
@Override
public void run() {
 
            while (!((forks[indexOfForkLeft].availablePermits() == 1) &&
                    (forks[indexOfForkRight].availablePermits() == 1))) {
                //wait
            }
            eat();
            releaseForks();
}
 
private void eat() {
    try {
        forks[indexOfForkLeft].acquire(1);
        forks[indexOfForkRight].acquire(1);
        System.out.println(name + "       -----eating");
        sleep(5000);
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
}
private void releaseForks() {
    forks[indexOfForkLeft].release(1);
    forks[indexOfForkRight].release(1);
}}
 
 
// Main class
 
public class MainThred {
 
public static void main(String[] args) throws InterruptedException {
    Philosopher philosopher_1 = new Philosopher("Philosopher_1", 1, 0);
    Philosopher philosopher_2 = new Philosopher("Philosopher_2", 2, 1);
    Philosopher philosopher_3 = new Philosopher("Philosopher_3", 3, 2);
    Philosopher philosopher_4 = new Philosopher("Philosopher_4", 4, 3);
    Philosopher philosopher_5 = new Philosopher("Philosopher_5", 0, 4);
    philosopher_1.start();
    philosopher_2.start();
    philosopher_3.start();
    philosopher_4.start();
    philosopher_5.start();
 
}}
 
 
// интерфейс с массивом вилок
 
public interface Fork {
 
Semaphore[] forks = {new Semaphore(1), new Semaphore(1), new Semaphore(1), new Semaphore(1), new Semaphore(1)};}
 
 
Вывод в консоль следующий :
 
Philosopher_1       -----eating
Philosopher_3       -----eating
Philosopher_5       -----eating
Philosopher_2       -----eating
Philosopher_4       -----eating
Это есть пример одного обеда философов когда одновременно могут есть только двое. Данная очередность выполнения потоков мне подходит. Единственное что нужно сделать - выполнять данный "цикл" заданное количество раз, т.е повторять обед нужное количество раз. Подскажите какими средствами Java и Android можно добиться результата?Спасибо.
http://www.cyberforum.ru/android-dev/thread1821719.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2016, 18:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задача об обедающих философах. Повторное выполнение потока в Android (Программирование Android):

Задача об обедающих философах
Тема заезженная,но все таки. Интересует решение задачи "Обедающих философов"....

Задача об обедающих философах
Доброго времени суток! Поиском пользовался, но ответа для себя не нашёл,...

Задача об обедающих философах [C++|Linux|ARM Mitel5000]
Всем привет) Собственно несколько дней я ковыряюсь с проблемой и не знаю как её...

Ординарная Сеть Петри для задачи об "обедающих философах"
Помогите с сетью Петри. дуб в этом Задача об обедающих философах. Пять...

Задача о философах
Даны 5 философов, сидящих в круг, и 5 вилок. Каждый из них может: думать, брать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2016, 18:25
Привет! Вот еще темы с решениями:

Задача о философах с использованием событий
Пытаюсь разобраться с этой задачей . Задача: за круглым столом сидят философы....

задача про обедающих философов
Здравствуйте! Делаю программу про обедающих философов. ...

Выполнение слота основного потока через сигнал второстепенного потока
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и...

Потоки. Event. Задача про обедающих философов.
Здравствуйте, товарищи. Возник вопрос непонимания, по которому не удалось...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru