Распараллеливание процессов
Использование промежуточных буферов, представляющих собой динамические массивы. Модель поведения потока. Значения констант и реализуемые потоками функции. Определение максимального размера буферов. Генерацию 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