Advertisement
Guest User

Fork Client

a guest
Feb 16th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.56 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Diagnostics;
  4. using System.Collections.Generic;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ParallelMatrix
  8. {
  9.     class Program
  10.     {
  11.  
  12.         const int kNumPhilosophers = 5;
  13.         static String kFork = "Fork";
  14.        
  15.         static String getSemaphorName(int numer)
  16.         {
  17.             return kFork + numer.ToString();
  18.         }
  19.  
  20.  
  21.         static void eating(int secondForkNumer, int firstForkNumer, int philosopher)
  22.         {
  23.             Random randomizer = new Random();
  24.             while (true)
  25.             {
  26.                 Semaphore firstFork = new Semaphore(5, 5);
  27.                 if (Semaphore.TryOpenExisting(getSemaphorName(firstForkNumer), out firstFork))
  28.                 {
  29.                     firstFork.WaitOne();
  30.                     Console.WriteLine("ph {0} takes {1} f", philosopher, firstForkNumer);
  31.  
  32.                     Semaphore secondFork = new Semaphore(5, 5);
  33.                     if (Semaphore.TryOpenExisting(getSemaphorName(secondForkNumer), out secondFork))
  34.                     {
  35.  
  36.                         secondFork.WaitOne();
  37.  
  38.                         Console.WriteLine("ph {0} takes {1} f", philosopher, secondForkNumer);
  39.                         Console.WriteLine("******PHITLOSOPHER {0} EATS!!!!", philosopher);
  40.                         Thread.Sleep(randomizer.Next(500) + 200);
  41.                         Console.WriteLine("ph {0} releases {1} f", philosopher, secondForkNumer);
  42.                         secondFork.Release();
  43.                     }
  44.                     else
  45.                     {
  46.                         Console.WriteLine("ph {0} error: invalid fork {1}", philosopher, secondForkNumer);
  47.                     }
  48.                     Console.WriteLine("ph {0} releases {1} f", philosopher, firstForkNumer);
  49.                     firstFork.Release();
  50.                 }
  51.                 else
  52.                 {
  53.                     Console.WriteLine("ph {0} error: invalid fork {1}", philosopher, firstForkNumer);
  54.                 }
  55.                 Thread.Sleep(randomizer.Next(1000) + 400);
  56.             }
  57.         }
  58.  
  59.  
  60.         static void Main(string[] args)
  61.         {
  62.             Console.WriteLine(args[0]);
  63.             int philisopherNumber = Int32.Parse(args[0]);
  64.             if (philisopherNumber==0)
  65.             {
  66.                 eating(4, 0, philisopherNumber);
  67.             }
  68.             else
  69.             {
  70.                 eating(philisopherNumber, philisopherNumber-1, philisopherNumber);
  71.             }
  72.            
  73.             Console.ReadKey(false);
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement