Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- using System.Diagnostics;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- namespace ParallelMatrix
- {
- class Program
- {
- const int kNumPhilosophers = 5;
- static String kFork = "Fork";
- static String getSemaphorName(int numer)
- {
- return kFork + numer.ToString();
- }
- static void eating(int secondForkNumer, int firstForkNumer, int philosopher)
- {
- Random randomizer = new Random();
- while (true)
- {
- Semaphore firstFork = new Semaphore(5, 5);
- if (Semaphore.TryOpenExisting(getSemaphorName(firstForkNumer), out firstFork))
- {
- firstFork.WaitOne();
- Console.WriteLine("ph {0} takes {1} f", philosopher, firstForkNumer);
- Semaphore secondFork = new Semaphore(5, 5);
- if (Semaphore.TryOpenExisting(getSemaphorName(secondForkNumer), out secondFork))
- {
- secondFork.WaitOne();
- Console.WriteLine("ph {0} takes {1} f", philosopher, secondForkNumer);
- Console.WriteLine("******PHITLOSOPHER {0} EATS!!!!", philosopher);
- Thread.Sleep(randomizer.Next(500) + 200);
- Console.WriteLine("ph {0} releases {1} f", philosopher, secondForkNumer);
- secondFork.Release();
- }
- else
- {
- Console.WriteLine("ph {0} error: invalid fork {1}", philosopher, secondForkNumer);
- }
- Console.WriteLine("ph {0} releases {1} f", philosopher, firstForkNumer);
- firstFork.Release();
- }
- else
- {
- Console.WriteLine("ph {0} error: invalid fork {1}", philosopher, firstForkNumer);
- }
- Thread.Sleep(randomizer.Next(1000) + 400);
- }
- }
- static void Main(string[] args)
- {
- Console.WriteLine(args[0]);
- int philisopherNumber = Int32.Parse(args[0]);
- if (philisopherNumber==0)
- {
- eating(4, 0, philisopherNumber);
- }
- else
- {
- eating(philisopherNumber, philisopherNumber-1, philisopherNumber);
- }
- Console.ReadKey(false);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement