Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 3
Регистрация: 13.01.2013
Сообщений: 142

Семафоры

25.02.2016, 18:54. Показов 705. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Пишу на NetBeans, программа для работы с потоками и семафорами. Суть в следующем, написал объявления семафоров в классе формы:
Java
1
2
3
4
5
6
7
8
9
private final int size = 5;
    public RingBuffer ring = new RingBuffer(size);
    public static ConsumerLetters consumer1 = new ConsumerLetters();
    public static ConsumerDigits consumer2 = new ConsumerDigits();
    public static ConsumerSymbols consumer3 = new ConsumerSymbols();
    
    Semaphore _busy = new Semaphore(1);
    Semaphore _empty = new Semaphore(size);
    Semaphore _full = new Semaphore(0);
Здесь RingBuffer класс созданный мной, реализующий кольцевой буфер. Затем я при изменении textArea записываю в него символы, считать которые основная задача Consumer-а первого, второй и третий пока не использую.

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
_sourceText.textProperty().addListener(new ChangeListener<String>(){
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                try {
                    System.out.println("_empty = " + _empty.availablePermits());
                    _empty.acquire();
                    System.out.println("_empty = " + _empty.availablePermits());
                    System.out.println("_busy = " + _busy.availablePermits());
                    _busy.acquire();
                    System.out.println("_busy = " + _busy.availablePermits());
                    ring.bufWrite(newValue.substring(newValue.length() - 1));
                    ring.movHead();
                    System.out.println("Producer running...");
                    System.out.println("_busy = " + _busy.availablePermits());
                    _busy.release();
                    System.out.println("_busy = " + _busy.availablePermits());
                    System.out.println("_full = " + _full.availablePermits());
                    _full.release();
                    System.out.println("_full = " + _full.availablePermits());
                } catch (InterruptedException ex) {
                    System.out.println("Error)))");
                }
            }
        });
Затем в классе ConsumerLetters я пытаюсь вытащить символы из кольцевого буфера:
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
package parallellab1;
 
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class ConsumerLetters extends Thread {
    
    ParallelLab1 _form = new ParallelLab1();
    String temp;
    
    @Override
    public void run(){
        do{
            try {
                /*Thread.sleep(3000);
                System.out.println(_form._empty.availablePermits());
                System.out.println(_form._busy.availablePermits());
                System.out.println(_form._full.availablePermits());*/
                _form._full.acquire();
                _form._busy.acquire();
                //System.out.println(_form._busy.availablePermits());
                temp = _form.ring.bufRead();
                _form._trigger1.setText(temp);
                System.out.println("Consumer running...");
                _form.ring.movTail();
                _form._busy.release();
                _form._empty.release();
             } catch (InterruptedException ex) {
                 Logger.getLogger(ConsumerLetters.class.getName()).log(Level.SEVERE, null, ex);
                 System.out.println("lol");
             }
        }while(true);
    }    
}
Но в строке
Java
1
_form._full.acquire();
он тормозит и ничего не делает. Хотя когда закомментированым кодом вывожу значения семафоров выводит начальные 5 1 0. А sout-ы в главной форме выводят все отлично и при заполнении буфера 5 символами ввод не продолжишь.

Подскажите пожалуйста в чем дело?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2016, 18:54
Ответы с готовыми решениями:

Семафоры
Нужно написать программу &quot;Басейн&quot;. У нас есть 3 команды спортсменов. Красные , зеленые и лиловые. Каждая команда ненавидит 2 другие. ...

"Спящий парикмахер", используя семафоры
Добрый день, подскажите если у кого есть код для задачки про спящего парикмахера, алгоритм понятен, но написать используя семафоры не...

Работа на Java с WinAPI (мьютексы, семафоры)
Добвый вечер! Удобно ли работать на java с winapi, а именно интересует меня синхронизация процессов (мьютексы, семафоры и тд)? Можете...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2016, 18:54
Помогаю со студенческими работами здесь

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

Семафоры
Помогите решить задачу. Есть пример, но делаю по аналогии не получается. #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

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

Семафоры
Друзья, помогите пожалуйста, туплю. Надо чтобы в методе запускались два потока, но последовательно. Друг за дружкой. То есть чтобы...

Семафоры
Добрый вечер!:) У меня есть семафор и несколько потоков. Один и тот же семафор используется в каждом потоке. Семафор у меня объявлен...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru