//============================================= //Lab3 C# //Badovskiy Alexsandr IO-96 FIOT //============================================= using System; using System.Collections.Generic; using System.Text; using System.Threading; //using System.DataTime.Second.get; namespace kursrab { class Program { //--Line N-- static DateTime start, finish; static int N = 1000; static int P = 6; static int H = N / P; //--Sku------- static int[,] MZ = new int[N, N]; //----------------------------- static int[,] MA = new int[N, N]; static int[,] MB = new int[N, N]; static int[,] MC = new int[N, N]; static int[,] MT = new int[N, N]; static int alfa = 1; //---------------------------------------- static Mutex Sku = new Mutex(false);//Mutex static EventWaitHandle S1 = new ManualResetEvent(false);//Sobitia static EventWaitHandle S3 = new ManualResetEvent(false); static EventWaitHandle S6 = new ManualResetEvent(false); static Semaphore W = new Semaphore(0, 5);//Semaphore static Object Mon = new Object();//Monitor static Object KS = new Object();//K.seitsi //-------Task1--------------------------------------------------------- static void T1() { Console.WriteLine("T1 started"); int alfa1; int[,] MZ1 = new int[N, N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MB[i, j] = 1; } } //--Singal T3,T6-- S1.Set(); //--Wait T3,T6-- S3.WaitOne(); S6.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa1 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ1[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = 0; i < H; i++) { for (int j = 0; j < N; j++) { MT[i, j] = 0; for (int k = 0; k < N; k++) { MT[i, j] += MZ1[k, j] * MC[i, k] * alfa1; } } } for (int i = 0; i < H; i++) { for (int j = 0; j < N; j++) { MA[i, j] = 0; MA[i, j] = MB[i, j] + MT[i, j]; } } //--Wait T2-T6-- W.WaitOne(); W.WaitOne(); W.WaitOne(); W.WaitOne(); W.WaitOne(); // ----Conclusion-------------------------- Console.Write("MA=( "); for (int i = 0; i < N; i++) { Console.WriteLine(); for (int j = 0; j < N; j++) { if (N < 500) Console.Write(" " + MA[i, j]); } } finish = DateTime.Now; // Time Finished TimeSpan time = finish - start; //Time Start - Finish Console.Write("\nTime calc: " + time); //Time Clock Console.WriteLine("T1 finished"); //Console.WriteLine(time.Seconds.ToString() + " "); (Time Second) } //-------Task2--------------------------------------------------------- static void T2() { Console.WriteLine("T2 started"); int alfa2; int[,] MZ2 = new int[N, N]; //--Wait T1,T3,T6-- S1.WaitOne(); S3.WaitOne(); S6.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa2 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ2[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = H; i < H * 2; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { MT[i, j] += MC[i, k] * MZ2[k, j] * alfa2; } } } for (int i = H; i < H * 2; i++) { for (int j = 0; j < N; j++) { MA[i, j] = MB[i, j] + MT[i, j]; } } //--Singal T1-- W.Release(); Console.WriteLine("T2 finished"); } //-------Task3--------------------------------------------------------- static void T3() { Console.WriteLine("T3 started"); int alfa3; int[,] MZ3 = new int[N, N]; alfa = 1; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MC[i, j] = 1; } } //--Singal T1,T6-- S3.Set(); //--Wait T1,T6-- S1.WaitOne(); S6.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa3 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ3[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = H * 2; i < H * 3; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { MT[i, j] += MC[i, k] * MZ3[k, j] * alfa3; } } } for (int i = H * 2; i < H * 3; i++) { for (int j = 0; j < N; j++) { MA[i, j] = MB[i, j] + MT[i, j]; } } //--Singal T1-- W.Release(); Console.WriteLine("T3 finished"); } //-------Task4--------------------------------------------------------- static void T4() { Console.WriteLine("T4 started"); int alfa4; int[,] MZ4 = new int[N, N]; //--Wait T1,T3,T6-- S1.WaitOne(); S3.WaitOne(); S6.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa4 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ4[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = H * 3; i < H * 4; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { MT[i, j] += MC[i, k] * MZ4[k, j] * alfa4; } } } for (int i = H * 3; i < H * 4; i++) { for (int j = 0; j < N; j++) { MA[i, j] = MB[i, j] + MT[i, j]; } } //--Singal T1-- W.Release(); Console.WriteLine("T4 finished"); } //-------Task5--------------------------------------------------------- static void T5() { Console.WriteLine("T2 started"); int alfa5; int[,] MZ5 = new int[N, N]; //--Wait T1,T3,T6-- S1.WaitOne(); S3.WaitOne(); S6.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa5 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ5[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = H * 4; i < H * 5; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { MT[i, j] += MC[i, k] * MZ5[k, j] * alfa5; } } } for (int i = H * 4; i < H * 5; i++) { for (int j = 0; j < N; j++) { MA[i, j] = MB[i, j] + MT[i, j]; } } //--Singal T1-- W.Release(); Console.WriteLine("T5 finished"); } //-------Task6--------------------------------------------------------- static void T6() { Console.WriteLine("T6 started"); int alfa6; int[,] MZ6 = new int[N, N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ[i, j] = 1; } } //--Singal T1,T3,-- S6.Set(); //--Wait T1,T3-- S1.WaitOne(); S3.WaitOne(); //----Copy---------------------------- Sku.WaitOne(); alfa6 = alfa; Sku.ReleaseMutex(); lock (KS) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { MZ6[i, j] = MZ[i, j]; } } } //----Account------------------------- for (int i = H * 5; i < N; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { MT[i, j] += MC[i, k] * MZ6[k, j] * alfa6; } } } for (int i = H * 5; i < N; i++) { for (int j = 0; j < N; j++) { MA[i, j] = MB[i, j] + MT[i, j]; } } //--Singal T1-- W.Release(); Console.WriteLine("T6 finished"); } //--------MAIN-------------------------------------------------------- static void Main(string[] args) { start = DateTime.Now; //Time Start new Thread(T1).Start(); new Thread(T2).Start(); new Thread(T3).Start(); new Thread(T4).Start(); new Thread(T5).Start(); new Thread(T6).Start(); Console.ReadKey(); } } }