Sobes.tech
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 (vai WaitOne C#), 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.