diff --git a/.gitignore b/.gitignore
index 697082a..30c9ddf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,6 @@
/dozorova_alena_lab_2/ConsoleApp2/.vs
/dozorova_alena_lab_2/ConsoleApp2/bin
/dozorova_alena_lab_2/ConsoleApp2/obj
+/dozorova_alena_lab_5/ConsoleApp1/.vs
+/dozorova_alena_lab_5/ConsoleApp1/bin
+/dozorova_alena_lab_5/ConsoleApp1/obj
diff --git a/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.csproj b/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.csproj
new file mode 100644
index 0000000..74abf5c
--- /dev/null
+++ b/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.sln b/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.sln
new file mode 100644
index 0000000..e182357
--- /dev/null
+++ b/dozorova_alena_lab_5/ConsoleApp1/ConsoleApp1.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.35004.147
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1.csproj", "{FF70279D-C317-4A3D-B2C2-0FFD9FB4B22E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FF70279D-C317-4A3D-B2C2-0FFD9FB4B22E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FF70279D-C317-4A3D-B2C2-0FFD9FB4B22E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FF70279D-C317-4A3D-B2C2-0FFD9FB4B22E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FF70279D-C317-4A3D-B2C2-0FFD9FB4B22E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1501FAF9-199B-40BA-9918-AC5952D318BE}
+ EndGlobalSection
+EndGlobal
diff --git a/dozorova_alena_lab_5/ConsoleApp1/Program.cs b/dozorova_alena_lab_5/ConsoleApp1/Program.cs
new file mode 100644
index 0000000..0b99f9a
--- /dev/null
+++ b/dozorova_alena_lab_5/ConsoleApp1/Program.cs
@@ -0,0 +1,84 @@
+
+using System.Diagnostics;
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ Console.WriteLine("");
+
+ var value = new int[] { 100, 300, 500 };
+
+ foreach (var i in value)
+ {
+ var a = Create(i, i);
+ var b = Create(i, i);
+
+ List times = new() {};
+
+ for (int j = 1; j <= 10; j++)
+ {
+ var sw = new Stopwatch();
+ sw.Start();
+
+ MultiplyCreateTask(a, b, j);
+
+ sw.Stop();
+ times.Add(sw.ElapsedMilliseconds);
+ }
+ Console.WriteLine("Результаты вычисления для количества потоков от 1 до 5 для матрицы cо стороной "+i+": "+string.Join("\t", times));
+ }
+
+ }
+
+ private static int[,] Create(int x, int y)
+ {
+ var rnd = new Random();
+
+ var res = new int[y, x];
+
+ for (int i = 0; i < y; i++)
+ {
+ for (int j = 0; j < x; j++)
+ {
+ res[i, j] = rnd.Next(0, 100);
+ }
+ }
+ return res;
+ }
+
+ private static int[,] MultiplyCreateTask(int[,] matrix1, int[,] matrix2, int maxCount)
+ {
+ int[,] res = new int[matrix1.GetLength(0), matrix2.GetLength(1)];
+
+ var semaphore = new SemaphoreSlim(maxCount, maxCount);
+
+ for (int i = 0; i < matrix1.GetLength(0); i++)
+ {
+ for (int j = 0; j < matrix2.GetLength(1); j++)
+ {
+ int ci = i;
+ int cj = j;
+
+ var task = Task.Run(() =>
+ {
+ try
+ {
+ semaphore.Wait();
+
+ res[ci, cj] = CalculateValue(matrix1, matrix2, ci, cj);
+ }
+ finally
+ {
+ semaphore.Release();
+ }
+ });
+
+ }
+ }
+ semaphore.Wait(maxCount);
+ return res;
+ }
+
+ private static int CalculateValue(int[,] matrix1, int[,] matrix2, int i, int j)
+ => Enumerable.Range(0, matrix1.GetLength(1)).Sum(k => matrix1[i, k] * matrix2[k, j]);
+}
\ No newline at end of file
diff --git a/dozorova_alena_lab_5/README.md b/dozorova_alena_lab_5/README.md
new file mode 100644
index 0000000..7b16850
--- /dev/null
+++ b/dozorova_alena_lab_5/README.md
@@ -0,0 +1,24 @@
+# Лабораторная работа 5
+В рамках этой работы проверяется скорость расчета умножения двух матриц в некоторое количество потоков
+## Описание
+Основной принцип умножения матриц: строки умножаются на столбцы, таким образом получаются элементы. Для распараллеливания этого процесса вычисление некоторых объектов матрицы выносят в отдельные потоки, которые работают параллельно
+
+## Запуск
+Для проверки гипотезы и реализации параллельного умножения в консоли на языке c# был реализован тестовый контур: для каждого вида матриц (100*100, 300*300 и 500*500) запускался процесс вычисления произведения в количестве потоков от 1 до 5 с использованием SsemaphoreSlim, который контролировал выполнение в заданном количестве потоков. Для каждого вычисления засекалось время в миллисекундах.
+## Результаты
+Что мы получили
+
+![Результаты вычислений 1](image.png)
+
+Результаты спорные, так как при повышении количества потоков нельзя сказать, что повышается скорость вычислений. Это связано с тем, что работа с потоками сама по сбе требует ресурсов и времени.
+Повысим количестов потоков до 10:
+
+![Результаты вычислений 2](image-1.png)
+
+Для небольшой матрицы видна разница в сравнении с прошлым результатом, но не так сильно, как для больших. Повышение количества потоков позволило существенно сократить время вычислений
+
+## Видеодемонстрация
+Видедемонстрация по [адресу](https://drive.google.com/file/d/1YaQTg8OM5sVT6q4hkJvopGHFy-SM_Zjn/view?usp=sharing)
+
+
+
diff --git a/dozorova_alena_lab_5/image-1.png b/dozorova_alena_lab_5/image-1.png
new file mode 100644
index 0000000..7c9f98c
Binary files /dev/null and b/dozorova_alena_lab_5/image-1.png differ
diff --git a/dozorova_alena_lab_5/image.png b/dozorova_alena_lab_5/image.png
new file mode 100644
index 0000000..9c9a487
Binary files /dev/null and b/dozorova_alena_lab_5/image.png differ