Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.92 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Multithread_Computation
  5. {
  6.     class Program
  7.     {
  8.         private static Semaphore _pool;
  9.         static int a = 1,
  10.             b = 3,
  11.             c = 6,
  12.             d = 2,
  13.             e = 4,
  14.             f = 8;
  15.  
  16.         static int res1, res2, res3, res4;
  17.  
  18.         static int[] SharedTable = new int[5];
  19.         static int i = 0;
  20.  
  21.         static void Main(string[] args)
  22.         {
  23.  
  24.             _pool = new Semaphore(1, 2);
  25.  
  26.             Thread t1 = new Thread(new ThreadStart(Thread1));
  27.             Thread t2 = new Thread(new ThreadStart(Thread2));
  28.             Thread t3 = new Thread(new ThreadStart(Thread3));
  29.             Thread t4 = new Thread(() => Thread4(t3));
  30.  
  31.          
  32.  
  33.  
  34.             t1.Start();
  35.             t2.Start();
  36.             t3.Start();
  37.             t1.Join();
  38.             t2.Join();
  39.             t4.Start();
  40.  
  41.             Thread.Sleep(1000);
  42.  
  43.             _pool.Release();
  44.  
  45.         }
  46.  
  47.  
  48.         static void Thread1()
  49.         {
  50.             _pool.WaitOne();
  51.  
  52.             SharedTable[i] = a + b;
  53.  
  54.             res1 = i;
  55.  
  56.             i++;
  57.  
  58.             _pool.Release();
  59.         }
  60.         static void Thread2()
  61.         {
  62.             _pool.WaitOne();
  63.  
  64.             SharedTable[i] = c + d;
  65.  
  66.             res2 = i;
  67.  
  68.             i++;
  69.  
  70.             _pool.Release();
  71.         }
  72.         static void Thread3()
  73.         {
  74.             _pool.WaitOne();
  75.  
  76.             SharedTable[i] = e + f;
  77.  
  78.             res3 = i;
  79.  
  80.             i++;
  81.  
  82.             _pool.Release();
  83.         }
  84.         static void Thread4(Thread t3)
  85.         {
  86.             _pool.WaitOne();
  87.  
  88.             SharedTable[i] = SharedTable[res1] * SharedTable[res2];
  89.  
  90.             res4 = i;
  91.             i++;
  92.  
  93.             t3.Join();
  94.  
  95.             SharedTable[i] = SharedTable[res4] * SharedTable[res3];
  96.  
  97.             Console.WriteLine("(" + a + " + " + b + ")(" + c + " + " + d + ")(" + e + " + " + f + ")" + " = " + SharedTable[i]);
  98.  
  99.  
  100.             _pool.Release();
  101.         }
  102.  
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement