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) или нет, у листа с вилками?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу простенькое приложение, застопорился на вот этом моменте, как заставить метод StartExercises подождать пока выполниться таймер ("протикает"...
Есть таблица с данными реквизитов (ФИО, должности и пр) На другой странице есть отчёт, куда эти данные нужно передать при условии, что проставлен...
Как можно сделать универсальный код, что бы он выводил все поля любых структурПример: