Untitled
plain_text
2 months ago
3.1 kB
1
Indexable
Never
using System; using System.Threading; using System.Threading.Tasks; class Grandma { private int n; // Количество котиков private int m; // Вместительность миски private int b; // Количество корма, которое съедает один котик private int k; // Максимальное количество котиков у миски private int bowl; // Текущее количество корма в миске private object mutex = new object(); // Объект для синхронизации доступа к миске public Grandma(int n, int m, int b, int k) { this.n = n; this.m = m; this.b = b; this.k = k; this.bowl = this.m; } public void EatFromBowl(int catId) { lock (mutex) { Console.WriteLine($"Котик {catId} подошел к миске"); if (bowl >= b) { Console.WriteLine($"Котик {catId} кушает..."); bowl -= b; Thread.Sleep(3000); // Котик кушает 3 секунды Console.WriteLine($"Котик {catId} отошел от миски"); } else { Console.WriteLine("Миска пуста, бабушка пополняет корм..."); bowl = m; Console.WriteLine($"Котик {catId} кушает..."); bowl -= b; Thread.Sleep(3000); // Котик кушает 3 секунды Console.WriteLine($"Котик {catId} отошел от миски"); } } } public void FeedCats() { Task[] tasks = new Task[n]; for (int i = 0; i < n; i++) { int catId = i; tasks[i] = Task.Run(() => EatFromBowl(catId)); } Task.WaitAll(tasks); } } class Program { static void Main(string[] args) { Console.Write("Введите количество котиков: "); int n = int.Parse(Console.ReadLine()); Console.Write("Введите вместительность миски: "); int m = int.Parse(Console.ReadLine()); Console.Write("Введите количество корма, которое съедает один котик: "); int b = int.Parse(Console.ReadLine()); Console.Write("Введите максимальное количество котиков у миски: "); int k = int.Parse(Console.ReadLine()); Grandma grandma = new Grandma(n, m, b, k); DateTime startTime = DateTime.Now; grandma.FeedCats(); DateTime endTime = DateTime.Now; TimeSpan elapsedTime = endTime - startTime; Console.WriteLine($"Время, потребовавшееся на накормление всех котиков: {elapsedTime.TotalSeconds:F0} секунд"); } }