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();
}
}
}
В этом примере одновременно могут работать не более трёх потоков.