Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.1 kB
1
Indexable
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} секунд");
    }
}