Junior — Middle
Можете ли да обясните какво е семафор и как се използва за контрол на достъпа до ресурси?
sobes.tech AI
Отговор от 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();
}
}
}
По този начин семафорът ограничава броя на нишките, работещи едновременно с ресурса, предотвратява състезателни условия и осигурява коректна работа.