using System.Collections.Generic;
using System.Threading.Tasks;
namespace CSharp_Assignment_3
public sealed class Customers
static public void Meals(object LChopstick, object RChopstick, int NoPerson, int leftChopstickNo, int rightChopstickNo)
Console.WriteLine(" Customer {0} picked {1} chopstick.", NoPerson, leftChopstickNo);
Console.WriteLine(" Customer {0} picked {1} chopstick.", NoPerson, rightChopstickNo);
Console.WriteLine("Customer {0} Meals.", NoPerson);
Console.WriteLine(" Customer {0} released {1} chopstick.", NoPerson, rightChopstickNo);
Console.WriteLine(" Customer {0} released {1} chopstick.", NoPerson, leftChopstickNo);
public static void Main(string[] args)
var chopsticks = new Dictionary<int, object>(NoPerson);
for (int i = 0; i < NoPerson; ++i)
chopsticks.Add(i, new object ());
Task[] tasks = new Task[NoPerson];
tasks[0] = new Task(() => Customers.Meals(chopsticks[0], chopsticks[NoPerson - 1], 0 + 1, 1, NoPerson));
for (int i = 1; i < NoPerson; ++i)
tasks[ix] = new Task(() => Customers.Meals(chopsticks[ix - 1], chopsticks[ix], ix + 1, ix, ix + 1));
Parallel.ForEach(tasks, t =>