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

281
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 подождать пока выполниться таймер ("протикает"...

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

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

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

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

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

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

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

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

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

257