Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Sergio131313
3 / 3 / 1
Регистрация: 14.09.2014
Сообщений: 90
#1

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

05.12.2016, 18:25. Просмотров 175. Ответов 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 можно добиться результата?Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2016, 18:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача об обедающих философах. Повторное выполнение потока в Android (Программирование Android):

Выполнение сценария на Android - Программирование Android
Приветствую, товарищи! Возник вопрос - возможно ли сделать .apk, который сведет к минимуму действия человека? В рамках одного цикла...

Задача об обедающих философах - C++ WinAPI
Тема заезженная,но все таки. Интересует решение задачи "Обедающих философов". Мне надо сделать решение этой задачи на формах (WinApi) ...

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

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

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

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

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

задача про обедающих философов - Delphi
Здравствуйте! Делаю программу про обедающих философов. http://alice.pnzgu.ru/~dvn/prolog/articls/9.htm Хочу сделать через картинки....

Выполнение слота основного потока через сигнал второстепенного потока - C++ Qt
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и Qlabel class Ui_QtGuiApp4Class { public: //...

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

Повторное выполнение программы - C#
Всем привет, у меня такая проблема : есть код using System; using System.Collections.Generic; using System.Linq; using System.Text;...


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

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

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