Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 6

Многопоточность: организация нескольких wait-set 'ов для объекта

20.01.2013, 15:40. Показов 896. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Встретил недавно такой пример. Основная идея: есть буфер и две операции - put & take. Для улучшение производительности мы организовываем две очереди на put и take соответственно. Тоесть если буфер заполнен, то при удалении мы уведомляем все put потоки; если он пуст, то при добавлении элемента, мы уведомляем все take потоки.

Внимание, вопрос: какой должна быть реализация CondVar, а именно функций await() и signal()??? (смотрите код ниже)

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
class CVBuffer {
       private final Mutex mutex = new Mutex();
       private final CondVar notFull = new CondVar(mutex);
       private final CondVar notEmpty = new CondVar(mutex);
       private int count = 0;
       private int takePtr = 0;     
       private int putPtr = 0;
       private final Object[] array;
     
       public CVBuffer(int capacity) { 
         array = new Object[capacity];
       }
     
       public void put(Object x) throws InterruptedException {
         mutex.acquire();
         try {
           while (count == array.length) {
             notFull.await();
           }
           array[putPtr] = x;
           putPtr = (putPtr + 1) % array.length;
           ++count;
           notEmpty.signal();
         }
         finally {
           mutex.release();
         }
       }
     
       public Object take() throws InterruptedException {
         Object x = null;
         mutex.acquire();
         try {
           while (count == 0) {
             notEmpty.await();
           }
           x = array[takePtr];
           array[takePtr] = null;
           takePtr = (takePtr + 1) % array.length;
           --count;
           notFull.signal();
         }
         finally {
           mutex.release();
         }
         return x;
     }
}
 
class CondVar { // реализация пропущена
    protected final Sync mutex;
    
    public CondVar(Sync loc) {
        mutex = loc;
    }
    
    public void await() throws InterruptedException; // analog of wait()
    public void timedwait(long ms) throws InterruptedException; // analog of attampt(long ms) 
    public void signal() throws InterruptedException; // analog of notify()
        public void broadcast() thwors InterruptedException; // analog of notifyAll()
}
Моя версия:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void await() throws InterruptedException {
    synchronized (this) {
        try {
            mutex.release();
            wait();
        } finally {
            mutex.acquire();
        }
    }
Ї
 
public void signal throws InterruptedException {
    synchronized (this) {
        mutex.release();
        notify();
    }
}
Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2013, 15:40
Ответы с готовыми решениями:

Многопоточность. wait(), notify()
Здравствуйте, в Шилдте есть пример: //Правильная реализация поставщика и потребителя package PCFixed; class Q { int n; ...

Set для объекта-атрибута в классе
имеется такая структура struct GameData { StateMachine machine; sf::RenderWindow window; AssetManager assets; InputManager...

организация сети для печати с нескольких ПК
Опишу задачу, сам сообразить не могу (спец. не профиля it). Исходные данные: 3 компьютера и один принтер. Условия: 2 компьютера...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2013, 15:40
Помогаю со студенческими работами здесь

Java.lang.IllegalMonitorStateException: object not locked by thread before wait() при вызове метода wait()
Здравствуйте! На этот раз, у меня проблема с вызовом метода wait() в новом фоновом потоке. Подскажите, как можно исправить код, чтобы...

Организация хранения констант для доступа к ним из нескольких книг Excel
Ребят, доброго времени суток. Подскажите пожалуйста направление "движения" для решения следующей проблемы. Существует ряд констант и ряд...

Организация вращения объекта вокруг уже вращающегося объекта
Собственно необходимо организовать движение вокруг уже движущегося объекта. XNA изучаю недавно, мне удалось создать лишь вращение...

Организация получения почты для пользователь по локальной сети офлайн с нескольких ящиков
Добрый день! На работе возникла необходимость устроить просмотр почты с двух ящиков другими пользователями локальной сети. Как можно...

Открыть для объекта TDBGrid свойство DefaultRowHeight (в нескольких формах проекта)
Мне было необходимо открыть для объекта TDBGrid свойство DefaultRowHeight. Я создал класс из TDBGrid в котором DefaultRowHeight объявил...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru