Back to questions
OZON
Junior — Middle
64
Объясните, что представляют собой семафоры и как они используются в управлении потоками в программировании.
Companies where asked
Answer from AI
sobes.tech AI
Семафор — это механизм синхронизации, используемый для управления доступом к общим ресурсам в многопоточных приложениях. Он содержит счётчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу.
Основные моменты:
- Если счётчик больше нуля, поток может войти и уменьшить счётчик на 1.
- Если счётчик равен нулю, поток блокируется и ждёт, пока другой поток не освободит ресурс.
- Когда поток заканчивает работу с ресурсом, он увеличивает счётчик, позволяя другим потокам продолжить.
Пример на C# с использованием SemaphoreSlim:
using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // максимум 2 потока одновременно
static void AccessResource(int id)
{
Console.WriteLine($"Поток {id} ожидает доступа");
semaphore.Wait(); // запрос доступа
Console.WriteLine($"Поток {id} получил доступ");
Thread.Sleep(1000); // имитация работы с ресурсом
Console.WriteLine($"Поток {id} освобождает ресурс");
semaphore.Release(); // освобождение ресурса
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int threadId = i;
new Thread(() => AccessResource(threadId)).Start();
}
}
}
В этом примере не более двух потоков одновременно могут работать с ресурсом, остальные ждут своей очереди.