Sobes.tech
Junior — Middle

Семафор деген эмне жана ал ресурстарга кирүүнү кантип көзөмөлдөйт?

sobes.tech AI

AIден жооп

Семафор — бул синхрондоштуруу механизми, ал көптөгөн жиптер колдонмолорунда жалпы ресурска кирүүнү көзөмөлдөө үчүн колдонулат. Ал эсептегичти камтыйт, ал көрсөтөт, канча жиптер бир убакта ресурска кире алат.

Ишке ашыруу принциби:

  • Башында, эсептегич жеткиликтүү ресурстардын санына коюлат (мисалы, 3).
  • Жип кирүүнү кааласа, ал Wait (же C#да WaitOne) операциясын чакырат, ал эсептегичти 1ге төмөндөтөт.
  • Эсептегич нөлдөн төмөн болсо, жип блоктолот жана ресурстун бошотулушун күтөт.
  • Жип ресурсту бошоткон соң, ал Release чакырып, эсептегичти жогорулатат жана күтүп жаткан жиптерди ачат.

C# мисалы:

using System;
using System.Threading;

class Program
{
    static Semaphore semaphore = new Semaphore(3, 3); // максимум 3 жип бир убакта

    static void AccessResource(int id)
    {
        Console.WriteLine($"Жип {id} күтүп жатат");
        semaphore.WaitOne(); // кирүү өтүнүчү
        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();
        }
    }
}

Мындайча айтканда, семафор бир убакта ресурсту иштетип жаткан жиптердин санын чектейт, атаандаштык шарттарды алдын алат жана туура иштешти камсыздайт.