Junior — Middle
Můžete vysvětlit, co je semafor a jak se používá k řízení přístupu k prostředkům?
sobes.tech AI
Odpověď od AI
Semafor je synchronizační mechanismus používaný k řízení přístupu ke sdílenému zdroji v vícevláknových aplikacích. Obsahuje čítač, který ukazuje, kolik vláken může současně přistupovat ke zdroji.
Princip fungování:
- Na začátku je čítač nastaven na počet dostupných zdrojů (například 3).
- Když vlákno chce získat přístup, volá operaci
Wait(neboWaitOnev C#), která snižuje čítač o 1. - Pokud se čítač stane menší než nula, vlákno je zablokováno a čeká, dokud není zdroj uvolněn.
- Když vlákno uvolní zdroj, volá
Release, čítač zvyšuje a odemyká čekající vlákna.
Příklad v C#:
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // maximálně 3 vlákna současně
static void AccessResource(int id)
{
Console.WriteLine($"Vlákno {id} čeká na přístup");
semaphore.WaitOne(); // žádost o přístup
Console.WriteLine($"Vlákno {id} získalo přístup");
Thread.Sleep(1000); // práce s zdrojem
Console.WriteLine($"Vlákno {id} uvolňuje zdroj");
semaphore.Release(); // uvolnění zdroje
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
Tímto způsobem semafor omezuje počet vláken pracujících současně se zdrojem, předchází závodním podmínkám a zajišťuje správnou funkčnost.