Распараллеливание процессов

Использование промежуточных буферов, представляющих собой динамические массивы. Модель поведения потока. Значения констант и реализуемые потоками функции. Определение максимального размера буферов. Генерацию 30 случайных чисел из интервала от 0 до 2.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 29.11.2020
Размер файла 224,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

Иркутский национальный исследовательский технический университет

Кафедра Автоматизированных систем

Отчет

к лабораторной работе по дисциплине: Технологии разработки программных комплексов

Распараллеливание процессов

Выполнил:

студент группы ИСТб-17-1

г. Иркутск 2020 г.

Содержание

  • 1. Постановка задачи
  • 2. Диаграмма классов
  • 3. Спецификация классов
  • 4. Исходный код
  • 5. Результаты

1. Постановка задачи

Значения констант и реализуемые потоками функции: N=15, где N - максимальный размер буферов. Задание подразумевает использование промежуточных буферов, представляющих собой динамические массивы.

Первый поток - генерирует в буфер 30 случайных чисел из интервала от 0 до 2.

Второй поток - извлекает числа из буфера по 5 штук, начиная с первого и переводит полученное число из 3-й системы счисления в 10-ю. Результат выводится на экран.

2. Диаграмма классов

Рисунок 1. UML-диаграмма классов

3. Спецификация классов

Таблица 1. Таблица спецификаций

Имя

Назначение

Тип

Класс Main

Метод public static void main ()

generator

ссылка на первый поток

Thread

converter

ссылка на второй поток

Thread

Класс Generator

данный класс описывает и реализует модель поведения первого потока, а именно генерацию 30 случайных чисел из интервала от 0 до 2

buffer

буфер

Buffer<Integer>

bufferSize

размер буфера

int

Метод Buffer <Integer> getBuffer () - вернуть текущий буфер

Метод public void run () - запустить поток

i

счетчик итераций, номера элемента обрабатываемого первым потоком

int

t

значение, генерируемое первым потоком

int

Класс Converter

данный класс описывает и реализует модель поведения второго потока, а именно извлечение чисел из буфера по 5 штук, начиная с первого и перевод полученного числа из 3-й системы счисления в 10-ю, вывод результата на экран

buffer

буфер

Buffer<Integer>

Метод Buffer <Integer> getBuffer () - вернуть текущий буфер

Метод public void run () - запустить поток

i

счетчик итераций

int

j

Счетчик итераций

int

count

счетчик номера элемента обрабатываемого вторым потоком

int

result

результат перевода числа из 3-й системы счисления в 10-ю

double

p

счетчик индексов для перевода из 3-й системы счисления в 10-ю

int

b

хранит нулевой элемент из листа

int

4. Исходный код

Класс Main

public class Main

{

public static void main(String[] args) {

Generator generator = new Generator();

Converter converter = new Converter(generator);

System.out.println("Поток | № | Значение");

generator.start();

converter.start();

try {

generator.join();

converter.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

Класс Generator

public class Generator extends Thread

{

private final int bufferSize = 15;

private ArrayList<Integer> buffer = new ArrayList<>();

@Override

public void run() {

int t;

for (int i = 1; i <= 30; i++) {

synchronized (buffer) {

while (buffer.size()==bufferSize) {

try {

buffer.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

//генерация чисел от 0до 2

t = ThreadLocalRandom.current().nextInt(3);

buffer.add(t);

System.out.println("Первый " + i + " " + t);

buffer.notify();

}

}

}

public ArrayList<Integer> getBuffer() {

return buffer;

}

}

Класс Converter

public class Converter extends Thread

{

private final ArrayList<Integer> buffer;

public Converter(Generator generator)

{

buffer = generator.getBuffer();

}

@Override

public void run() {

int count = 0;

double result = 0;

for (int j = 0; j < 6; j++) {

synchronized (buffer) {

while (buffer.isEmpty()) {

try {

buffer.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

//перевод из 3-й системы счисления в 10-ю

int p = 4;

int b = 0;

for(int i=0; i<5; i++){

try {

b = buffer.get(0);

buffer.remove(0);

result += b * Math.pow(3,p);

}

p--;

}

count++;

System.out.println("Второй " + count + " " + result);

buffer.notify();

}

result = 0;

}

}

}

5. Результаты

Рисунок 2. Результаты

динамический массив поток буфер

Размещено на Allbest.ru


Подобные документы

  • Способы получения случайных чисел в программировании и их использование для решения ряда задач. Принцип действия и тестирование работы генератора случайных чисел в Borland C++, его преимущества. Генерация одномерной и двумерной случайной величины.

    лабораторная работа [105,4 K], добавлен 06.07.2009

  • Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.

    лабораторная работа [1,4 M], добавлен 21.01.2015

  • Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.

    курсовая работа [66,3 K], добавлен 07.12.2010

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

    курсовая работа [207,5 K], добавлен 15.02.2012

  • Объявление, выделение, освобождение памяти под динамические массивы. Обращение к элементам. Решение задач с использованием динамических массивов на языке C++. Разработка и реализация программы для формирования и обработки динамического двумерного массива.

    курсовая работа [813,4 K], добавлен 13.06.2014

  • Анализ способов построения генераторов случайных чисел для криптографических задач. Анализ генератора случайных чисел на основе магнитометров. Анализ статистических свойств двоичных последовательностей, полученных путем квантования данных магнитометра.

    дипломная работа [2,5 M], добавлен 06.05.2018

  • Общие сведения об алгоритмах. Свойство и этапы построения алгоритма. Нисходящее проектирование программ. Основные алгоритмические структуры. Принципы структурной алгоритмизации. Массивы случайных чисел. Ввод исходных данных. Определение и вывод данных.

    методичка [435,3 K], добавлен 09.12.2014

  • Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.

    курсовая работа [172,4 K], добавлен 23.05.2012

  • Структура и функции генератора случайных чисел. Методы предельного уменьшения ошибки второго рода. Усиление шумового сигнала. Его дискретизация по времени и аналого-цифровое преобразование. Формирование случайной последовательности и ее корреляция.

    курсовая работа [299,4 K], добавлен 11.12.2014

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

    курсовая работа [451,1 K], добавлен 19.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.