Junior — Middle
Môžete vysvetliť, čo je semafor a ako sa používa na riadenie prístupu k zdrojom?
sobes.tech AI
Odpoveď od AI
Semafor je mechanizmus synchronizácie, ktorý sa používa na kontrolu prístupu ku zdieľanému zdroju v viacvláknových aplikáciách. Obsahuje čítač, ktorý ukazuje, koľko vlákien môže súčasne získať prístup ku zdroju.
Princíp fungovania:
- Na začiatku je čítač nastavený na počet dostupných zdrojov (napríklad 3).
- Keď vlákno chce získať prístup, volá operáciu
Wait(aleboWaitOnev C#), ktorá znižuje čítač o 1. - Ak sa čítač stane menší ako nula, vlákno je zablokované a čaká, kým sa zdroj neuvoľní.
- Keď vlákno uvoľní zdroj, volá
Release, zvyšuje čítač a odblokuje čakajúce vlákna.
Príklad v C#:
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // maximálne 3 vlákna súčasne
static void AccessResource(int id)
{
Console.WriteLine($"Vlákn {id} čaká na prístup");
semaphore.WaitOne(); // žiadosť o prístup
Console.WriteLine($"Vlákn {id} získal prístup");
Thread.Sleep(1000); // práca s zdrojom
Console.WriteLine($"Vlákn {id} uvoľňuje zdroj");
semaphore.Release(); // uvoľnenie zdroja
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
Týmto spôsobom semafor obmedzuje počet vlákien pracujúcich súčasne so zdrojom, zabraňuje súťažiam a zabezpečuje správnu funkčnosť.