Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
54 / 50 / 16
Регистрация: 14.10.2013
Сообщений: 161
1

Потоки и доступ к общим ресурсам!

06.11.2013, 23:52. Показов 3751. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Почитал форум (ограничился 5 темами) и ничего дельного не нашел.

Задача:

Создать 3 потока, которые получают доступ к ОДНОМУ ресурсу (с блокировками соответственно).

Пример:

Имеется касса (общий ресурс) и в нее по одному должны получить доступ 3 человека (потоки). Пока один человек в кассе (блокирует ее), остальные ждут. Как только он закончил, более шустрая нить занимается кассу и etc.

В соседней теме Многопоточный аэропорт :) попытались этот вопрос решить, но ушли в дремучий лес, да и задачка там посложнее.

Гуру, эксперты, профи, мастера, любители, кто нибудь откликнитесь)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2013, 23:52
Ответы с готовыми решениями:

Доступ к общим ресурсам
Проблема - пропадает доступ к общим ресурсам сети, либо предлагает ввести логин/пароль. На обоих...

Доступ к общим ресурсам на сервере из других подсетей
Такая ситуация, есть старый сервер с одной сетевой 192.168.1.5, на котором расшарено несколько...

На ноутбуке нет выхода в Интернет, но доступ к общим ресурсам сети есть
Здравствуйте. Вообщем такая проблема: "На ноуте нет доступа к сети Интернет, но доступ к общим...

Обеспечение доступа к общим ресурсам
Добрый день! Задание: Обеспечить доступ к 1 ftp-серверу (10.7.10.2) только для 1 (10.7.1.2) и 2...

7
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
07.11.2013, 07:53 2
Обычная синхронизация через synchornized вам подойдет. Описана в любом учебнике по Java.
0
54 / 50 / 16
Регистрация: 14.10.2013
Сообщений: 161
07.11.2013, 08:20  [ТС] 3
turbanoff, ну посоветуйте, пожалуйста, что ли учебник где это описано!

P.S. если это так просто, можно было бы снизойти на пример...
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
07.11.2013, 08:55 4
Литература перечислена тут - Литература по Java
Пример можно посмотреть тут - http://docs.oracle.com/javase/... ksync.html
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,763
07.11.2013, 17:18 5
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
import java.util.Random;
 
public class TestBox {
    public static void main(String[] args) throws InterruptedException {
        CashBox cashbox = new CashBox();
        Thread[] customers = new Thread[3];
        Random rand = new Random();
        String[] names = { "Иванов", "Петров", "Сидоров", "Сталин", "Рузвельт", "Черчиль" };
 
        for ( int i = 0; i < customers.length; ++i ) {
            Thread.sleep(rand.nextInt(3000) + 1000);
            customers[i] = new Thread(new Customer(names[rand.nextInt(names.length)], rand.nextInt(10000) + 1000, cashbox));
            customers[i].start();
        }
        
        for ( int i = 0; i < customers.length; ++i )
            customers[i].join();
    }
 
}
 
class CashBox {
    private boolean busy = false;
 
    public synchronized void accept() {
        while ( busy ) {
            try {
                wait();
            }
            catch ( InterruptedException ie ) {
                System.out.println("Ожидание прервано!");
            }
        }
        busy = true;
    }
    
    public synchronized void done() {
        busy = false;
        notifyAll();
    }
}
 
class Customer implements Runnable {
    private String name;
    private long dealtime;
    private CashBox cashbox;
    
    Customer(String n, long dt, CashBox cb) {
        name = n;
        dealtime = dt;
        cashbox = cb;
    }
 
    @Override
    public void run() {
        System.out.println(name + " подходит к кассе...");
        cashbox.accept();
        System.out.println(name + " общается с кассиром...");
        try {
            Thread.sleep(dealtime);
        }
        catch ( InterruptedException ie ) {
            System.out.println("Общение с кассиром прервано!");
        }
        cashbox.done();
        System.out.println(name + " уходит.");
    }
}
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
07.11.2013, 23:17 6
easybudda, а если касса не одна? как поступить?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,763
07.11.2013, 23:54 7
Цитата Сообщение от Recreate Посмотреть сообщение
а если касса не одна? как поступить?
Два очевидных решения:
1) у каждой кассы своя очередь, новый посетитель становится в ту, где народа меньше, или в первую доступную, если везде поровну или программисту лень морочиться
2) очередь общая, класс-менеджер, который отслеживает, когда одна из касс освобождается и отправляет туда первого из очереди.
Можно и ещё вариантов навыдумывать...
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
08.11.2013, 00:02 8
easybudda, А метод tryLock() можно как-то так использовать? По сути дела он же проверяет доступность блокировки? Но у меня почему-то подобный трюк заставляет customer'ов последовательно пробегать по кассам. Если брейк поставить, то все последовательно идут в одну кассу.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void docking(Customer customer) {
    for (Cashbox box : cashBoxes) {
        if (locker.tryLock()) {
        try {
            box.setCustomer(customer);
        } finally {
            box.unSetCustomer();
            locker.unlock();
        }
        } else {
        continue;
        }
    }
    }
0
08.11.2013, 00:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2013, 00:02
Помогаю со студенческими работами здесь

Группировка пользователей в AD для доступа к общим ресурсам
Имеется сетевой диск, на нём несколько папок. Надо разграничить доступ к этим папкам для разных...

Windows не может получить достп к общим сетевым ресурсам
В общем такая беда, не могу заходить на шары вообще! С других компов могу, именно с моей семерки не...

Общий доступ (DHCP) в Windows 7, доступ к серверным ресурсам
Для начала опишу как сделанно: Есть Серверный ПК, с двумя сетевухами, одна инет, вторая локаль....

Блокировать доступ к ресурсам
Здравствуйте! Есть в сетке сервак с видеонаблюдением на шиндовс 10, к нему подключаются по RDP...


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

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