Отменен
Заказ
1317607
Раздел
Программирование
Предмет
Антиплагиат
Не указан
Срок сдачи
25 Сен 2018 в 15:00
Цена
1 000 ₽
Блокировка
5 дней
Размещен
23 Сен 2018 в 09:47
Просмотров
225
Описание работы
Упражнение 1
1.1. Напишите Java программу, которая порождает n и m потоков двух различных типов как
описано ниже, где n и m – аргументы программы. Эти потоки обращаются к общему счетчику
(инициализированный как 0) в цикле (100 000 итераций). В каждой итерации цикла потоки первого
типа считывают значение счетчика в локальную (стековую) переменную, инкрементируют его, и
сохраняют результат обратно в счетчик. Потоки второго типа предоставляют тот же набор операций,
но вместо инкрементирования счетчика декрементируют его. Когда все потоки завершают свою
работу, программа выводит значение общего счетчика и время выполнения. (Попробуйте проверить
значение счетчика на одинаковом числе инкрементирующих и декрементирующих потоков).
Сохраните исходный код в файл Lab8NoSync.java.
1.2. Измените эту программу, используя ключевое слово synchronized для защиты счетчика.
Счетчик должен быть равен 0 в конце выполнения. Сохраните исходный код в файл Lab8Sync.java.
1.3. Измените первую программу для использования класса
java.util.concurrent.locks.ReentrantLock. Счетчик должен быть равен 0 в конце
выполнения. Сохраните исходный код в файл Lab8ReentrantLock.java.
1.4. Запустите третью программу с одинаковым набором 1, 2, 4 и 8 потоков и сохраните результат
в виде текстовой таблицы в файле Lab8.txt. Также сохраните время выполнения программы в мс и
спецификацию компьютера (характеристики процессора, памяти и операционной системы). Например,
для операционной системы Linux – результат выполнения команды cat /proc/cpuinfo.
Упражнение 2
Предположим, имеется так называемая проблема обеда дикарей, которая заключается в
следующем: племя дикарей принимает пищу с одной большой кастрюли, которая вмещает в себе N
порций. Когда дикари обедают, они берут порцию из кастрюли, если в ней имеется хотя бы одна
порция (т.е. пока кастрюля не опустеет). Если кастрюля пустеет, то они делают заказ повару, чтобы
тот ее наполнил. Повар всегда наполняет кастрюлю полностью (N порций). Подытожим ограничения
задачи: дикари не могут взять порцию пищи, если кастрюля пустая, и повар не может наполнить
кастрюлю, если в ней осталась хотя бы одна порция.
На самом деле, пример выдуманный. Эта задача носит известное название – задача Потребитель
и Производитель (от англ. Producer-Consumer).
2.1. Напишите программу (Lab8Savages1.java) для симуляции поведения племени дикарей
и повара, где каждый из них это поток, а кастрюля – общий ресурс, в соответствии с ограничениями,
приведенными выше. Учтите, что каждый дикарь хочет съесть только одну порцию пищи, но
количество дикарей должно быть больше, чем содержится порций в кастрюле, значит кастрюля
нуждается в пополнении.
2.2. Учитывая, что дикари всегда голодны (потоки в непрерывном цикле пытаются взять другую
порцию из кастрюли после того, как они съели свою), измените вашу программу
(Lab8Savages2.java) так, чтобы каждый дикарь в конечном итоге ел из кастрюли (совет:
подумайте о том, как сделать выполнение справедливым, т.е., чтобы один из дикарей не ел чаще
других). Количество дикарей фиксировано, и каждый из них знает друг о друге.
Комментарии на таком же уровне, как и в предыдущей работе. В самом файле приведены теор.часть и сами задания (ст. 11 pdf)
Нужна такая же работа?
  • Разместите заказ
  • Выберите исполнителя
  • Получите результат
Гарантия на работу 1 год
Средний балл 4.96
Стоимость Назначаете сами
Эксперт Выбираете сами
Уникальность работы от 70%
Нужна аналогичная работа?
Оформи быстрый заказ и узнай стоимость
Гарантированные бесплатные доработки
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Темы журнала
Показать ещё
Прямой эфир