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