Проблема обедающих философов

306
06 декабря 2017, 22:14
 class Program
{
    public static int philisopherNumber = 5;
    public static Task[] philosiphers;
    public static Mutex[] forks;
    static void Main(string[] args)
    {
        philosiphers = new Task[philisopherNumber];
        forks = new Mutex[philisopherNumber];
        for (int i = 0; i < philisopherNumber; ++i)
        {
            philosiphers[i] = CreateNewPhilosopher(i);
            forks[i] = new Mutex();
        }
        Task.WaitAll(philosiphers);
        Console.WriteLine("Finished eating.");
        Console.ReadLine();
    }
    private static Task CreateNewPhilosopher(int philosipherIndex)
    {
        return Task.Run(() =>
        {
            for (int i = 0; i < philisopherNumber; ++i)
            {
                Console.WriteLine($"Philosopher {philosipherIndex + 1}: thinking");
                var leftFork = GetForkIndex(philosipherIndex);
                var rightFork = GetForkIndex(philosipherIndex + 1);
                var forksList = new List<int>() { leftFork, rightFork }.OrderBy(index => index).ToList();
                foreach (var forkIndex in forksList)
                {
                    forks[forkIndex].WaitOne();
                }
                Console.WriteLine($"Philosopher {philosipherIndex + 1}: Eating with:\nfork {leftFork + 1} | fork {rightFork + 1}");
                Thread.Sleep(3000);
                forks[leftFork].ReleaseMutex();
                forks[rightFork].ReleaseMutex();
            } 
        });
    }
    private static int GetForkIndex(int index)
    {
        return index % philisopherNumber;
    }
}

На что влияет если я добавлю OrderBy(index => index) или нет, у листа с вилками?

READ ALSO
C# Как заставить метод подождать выполнения таймера (тиканья)?

C# Как заставить метод подождать выполнения таймера (тиканья)?

Пишу простенькое приложение, застопорился на вот этом моменте, как заставить метод StartExercises подождать пока выполниться таймер ("протикает"...

325
Подгрузка данных извне

Подгрузка данных извне

Есть таблица с данными реквизитов (ФИО, должности и пр) На другой странице есть отчёт, куда эти данные нужно передать при условии, что проставлен...

263
Вывод любых структур на экран

Вывод любых структур на экран

Как можно сделать универсальный код, что бы он выводил все поля любых структурПример:

292
Как поставить checkbox вместо значение из бд

Как поставить checkbox вместо значение из бд

Суть вот в чемВ базе есть таблица "table1"

290