Назад к вопросам
Middle
4
Как работает семафор? В чём его особенность по сравнению с lock?
Компании, где спрашивали
ИТ Инополис
Ответ от нейросети
sobes.tech AI
Семафор — это механизм синхронизации, который управляет доступом к ограниченному числу ресурсов. Он содержит счетчик, который показывает, сколько потоков могут одновременно получить доступ.
Как работает семафор:
- Изначально счетчик равен количеству доступных ресурсов.
- Поток вызывает
Wait(илиWaitOne), уменьшая счетчик на 1. - Если счетчик становится меньше 0, поток блокируется и ждет освобождения ресурса.
- Когда поток заканчивает работу с ресурсом, он вызывает
Release, увеличивая счетчик и разблокируя ожидающие потоки.
Особенность по сравнению с lock (мьютексом):
- Lock позволяет одновременно работать только одному потоку (бинарный семафор).
- Semaphore позволяет ограничить количество одновременно работающих потоков (например, 3 потока одновременно).
Пример использования семафора в C#:
SemaphoreSlim semaphore = new SemaphoreSlim(3); // максимум 3 потока
async Task AccessResourceAsync() {
await semaphore.WaitAsync();
try {
// работа с ресурсом
} finally {
semaphore.Release();
}
}