Junior — Middle
Vai jūs varat izskaidrot, kas ir semafors un kā tas tiek izmantots piekļuves kontrolei uz resursiem?
sobes.tech AI
Atbilde no AI
Semafors ir sinhronizācijas mehānisms, ko izmanto kopīga resursa piekļuves kontrolei daudzšūnu programmās. Tas satur skaitītāju, kas norāda, cik daudz pavedienu vienlaikus var piekļūt resursam.
Darba princips:
- Sākotnēji skaitītājs tiek iestatīts uz pieejamo resursu skaitu (piemēram, 3).
- Kad pavediens vēlas piekļūt, tas izsauc operāciju
Wait(vaiWaitOneC#), kas samazina skaitītāju par 1. - Ja skaitītājs kļūst mazāks par nulli, pavediens tiek bloķēts un gaida, līdz resursu atbrīvo.
- Kad pavediens atbrīvo resursu, tas izsauc
Release, palielinot skaitītāju un atbloķējot gaidošos pavedienus.
C# piemērs:
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // maksimāli 3 pavedieni vienlaikus
static void AccessResource(int id)
{
Console.WriteLine($"Pavediens {id} gaida piekļuvi");
semaphore.WaitOne(); // piekļuves pieprasījums
Console.WriteLine($"Pavediens {id} saņēma piekļuvi");
Thread.Sleep(1000); // darbs ar resursu
Console.WriteLine($"Pavediens {id} atbrīvo resursu");
semaphore.Release(); // resursa atbrīvošana
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
Tādējādi semafors ierobežo vienlaicīgi ar resursu strādājošo pavedienu skaitu, novērš sacensību apstākļus un nodrošina pareizu darbību.