Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Алгоритмы блокировки потоков

Автор:   •  Ноябрь 21, 2022  •  Лабораторная работа  •  1,532 Слов (7 Страниц)  •  134 Просмотры

Страница 1 из 7

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра ВТ

ОТЧЁТ

по лабораторной работе №1

по дисциплине
«Параллельные алгоритмы и системы»

Тема: «Алгоритмы блокировки потоков»

Студентка гр. 7305

_____________

Степанова А.А.

Преподаватель

_____________

Пазников А.А.

Санкт-Петербург

2021

Цель

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

Задание

  1. Разработать программу, реализующую параллельный алгоритм. Средства разработки: С/С++, Java.
  2. Выполнить анализ эффективности параллельной программы: построить графики зависимости пропускной способности от числа потоков, оценить масштабирование.
  3. Сформулировать выводы

Выполнение работы

При выполнении лабораторной работы были реализованы алгоритмы блокировки потоков, такие как MCS и CLH. Для реализации алгоритмов был выбран язык Java. Был осуществлён анализ эффективности параллельной программы по полученным данным, построены графики.

  1. MSC

Экспериментальные результаты:

Кол-во потоков

2

4

8

16

32

64

Кол-во блокировок

200150

110735

108321

94120

76872

61854

[pic 1]

  1. CLH

Экспериментальные результаты:

Кол-во потоков

2

4

8

16

32

64

Кол-во блокировок

280630

145791

120945

98916

89631

74721

[pic 2]

[pic 3]

Вывод

В результате полученных данных, можно сделать вывод, о том, что наибольшей пропускной способностью обладает алгоритм CLH. Также можно заметить, что при увеличении числа потоков пропускная способность алгоритмов уменьшается.

Листинг

CLH

Main,java

import java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
import
java.util.concurrent.atomic.AtomicBoolean;
import
java.util.concurrent.atomic.AtomicInteger;

public class
Main {
   
private final static int threads = 64;
   private final static
AtomicInteger count = new AtomicInteger(0);
   private final static
AtomicBoolean stop = new AtomicBoolean(false);
   private final static
CLHLock lock = new CLHLock();

   static class
MyRunnable implements Runnable {
       
@Override
       
public void run() {
           
while (!stop.get()) {
               
lock.lock();
               
count.incrementAndGet();
               
lock.unlock();
           
}
       }
   }

   
public static void main(String[] args) {
       ExecutorService exec = Executors.
newFixedThreadPool(threads);


       try
{
           
for (int i = 0; i < threads; i++) {
               exec.execute(
new MyRunnable());
           
}
       }
catch (Exception e) {
           e.printStackTrace()
;
       
}

       
try {
           Thread.
sleep(1000);
       
} catch (InterruptedException e) {
           
// TODO Auto-generated catch block
           
e.printStackTrace();
       
}

       
stop.set(true);
       
exec.shutdown();

       
System.out.println("locks: " + count);
   
}

}

...

Скачать:   txt (8.2 Kb)   pdf (193.6 Kb)   docx (64.5 Kb)  
Продолжить читать еще 6 страниц(ы) »
Доступно только на Essays.club