Junior — Middle
Обяснете какво е семафор и как се използва за управление на синхронизацията на нишки.
sobes.tech AI
Отговор от AI
Семафорът е примитив за синхронизация, който се използва за управление на достъпа до споделен ресурс от няколко нишки.
Той съдържа брояч, който показва колко нишки могат едновременно да получат достъп до ресурса.
- Ако броячът е по-голям от нула, нишката може да влезе и да намали брояча с 1.
- Ако броячът е нула, нишката се блокира и чака, докато друга нишка освободи ресурса.
В C# семафорът е представен чрез класа Semaphore или SemaphoreSlim.
Пример за използване на 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 localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
В този пример, не повече от две нишки могат да работят с ресурса едновременно, останалите чакат реда си.