Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 14.09.2014
Сообщений: 88
1

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

05.12.2016, 18:25. Показов 933. Ответов 0

Author24 — интернет-сервис помощи студентам
Добрый день. Пытаюсь реализовать задачу об обедающих философах на 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 можно добиться результата?Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2016, 18:25
Ответы с готовыми решениями:

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

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

Многопоточность: задача об обедающих философах
Доброго времени суток! Нужно перевести код с С++ с использованием библиотеки <thread> и <mutex> на...

Многопоточность, задача об обедающих философах (семафоры)
#include "iostream" #include "string" #include "windows.h" #include "process.h" #include...

0
05.12.2016, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2016, 18:25
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru