|
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 5
|
||||||||||||||||||||||||||
Потоки: как правильно работать с wait(), notify() и synchronized() на примере задачи?12.04.2014, 21:43. Показов 3435. Ответов 4
Метки нет (Все метки)
Задача: Есть производитель машин - Factory. Есть потребитель - Dealer. Они работают в двух потоках над общим складом. Factory производит и кладет машины в Storage, а Dealer достает.
Проблема: Dealer не запускается, пока Factory не заполнит весь склад. Аналогично, Factory не начнет работать, пока Dealer не заберет все машины из склада. Нужно: Чтобы потоки запускались работали одновременно, а не поочередно. Не могу найти баг в своем коде, выкладываю, все что есть. Заранее спасибо.
0
|
||||||||||||||||||||||||||
| 12.04.2014, 21:43 | |
|
Ответы с готовыми решениями:
4
Зачем synchronized вокруг wait/notify? Потоки. Wait, notify Почему notify не заканчивается без synchronized? |
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|
| 12.04.2014, 21:50 | |
|
ошибки вылазят, или в чем проблема?
0
|
|
|
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 5
|
|
| 12.04.2014, 21:55 [ТС] | |
|
IVIakCollideR, Ошибки не вылазят, все работает. Сначала поток Factory полностью заполняет Storage, а только потом поток Diler начинает доставать из Storage объекты. А должно как-то одновременно это происходить, когда в Storage появляются объекты Diler их сразу достаёт, а не ждёт пока Factory заполнит весь Storage.
0
|
|
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|||||||||||
| 12.04.2014, 22:23 | |||||||||||
|
правильно, у вас стоит общий лок, и он освободиться лишь в том случае в потоке фактори, когда она полностью заложит склад, то есть пока не вызовет wait() который отдаст управление
Добавлено через 1 минуту попробуйте создать 2 лок обьекта Добавлено через 10 минут а нет, извиняюсь, у тебя же обязательно с нотифаями, тогда 2 разных лока не проканает Добавлено через 10 минут как то вообще тогда условие задачи не соответствует тому что вы сделали. Я бы немного переписал синхронайз блоки Dealer и фактори Дилер:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 5
|
|||||||||||
| 13.04.2014, 11:12 [ТС] | |||||||||||
|
Спасибо за ответ
Но это не совсем то. Если на складе кончатся машины, то Diler превращается в холостой цикл while, что не есть тру. И теперь всё блокируется по поводу и без повода каждый раз, потому что wait так расставлен. А еще wait не как не предохранится от spurious wakeup ![]() Добавлено через 1 час 24 минуты Проблема нашлась. Всё работало корректно, только каждый поток успевал либо полностью заполнить, либо полностью опустошить склад. Если добавить sleep'ы в при создании и забирании товара, то всё работает как нужно.
0
|
|||||||||||
| 13.04.2014, 11:12 | |
|
Помогаю со студенческими работами здесь
5
Синхронизация. Wait(). Notify().
Обращение к файлу. wait(), notify(), notifyAll(), Runnable Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|