Sobes.tech
Back to questions
Junior — Middle
72

Каким образом можно контролировать число одновременно запущенных потоков в программе?

Answer from AI

sobes.tech AI

В C# для контроля числа одновременно запущенных потоков часто используют класс Semaphore или SemaphoreSlim. Они позволяют ограничить количество потоков, которые могут одновременно выполнять определённый участок кода.

Пример использования SemaphoreSlim:

using System;
using System.Threading;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(3); // максимум 3 потока одновременно

    static void Worker(int id)
    {
        semaphore.Wait(); // запрос разрешения
        Console.WriteLine($"Поток {id} начал работу");
        Thread.Sleep(1000); // имитация работы
        Console.WriteLine($"Поток {id} закончил работу");
        semaphore.Release(); // освобождение разрешения
    }

    static void Main()
    {
        for (int i = 1; i <= 10; i++)
        {
            int localId = i;
            new Thread(() => Worker(localId)).Start();
        }
    }
}

В этом примере одновременно могут работать не более трёх потоков.