Sobes.tech
Junior — Middle

Semafor nima ekanligini va u resurslarga kirishni qanday nazorat qilish uchun ishlatilishini tushuntirib bera olasizmi?

sobes.tech AI

AIdan javob

Semafor — bu umumiy resursga kirishni nazorat qilish uchun ishlatiladigan sinxronizatsiya mexanizmi. U hisoblagichni o'z ichiga oladi va bu hisoblagich, bir vaqtning o'zida qancha oqim resursga kirishi mumkinligini ko'rsatadi.

Ishlash prinsipi:

  • Dastlab, hisoblagich mavjud resurslar soniga sozlanadi (masalan, 3).
  • Oqim kirishni xohlaganda, u Wait (yoki C# da WaitOne) operatsiyasini chaqiradi, bu hisoblagichni 1 ga kamaytiradi.
  • Agar hisoblagich 0 dan kichik bo'lsa, oqim bloklanadi va resurs bo'shatilishini kutadi.
  • Oqim resursni bo'shatganda, u Release ni chaqiradi, hisoblagichni oshiradi va kutayotgan oqimlarni ochadi.

C# misoli:

using System;
using System.Threading;

class Program
{
    static Semaphore semaphore = new Semaphore(3, 3); // maksimal 3 oqim bir vaqtning o'zida

    static void AccessResource(int id)
    {
        Console.WriteLine($"Oqim {id} resursga kirishni kutmoqda");
        semaphore.WaitOne(); // kirish so'rovi
        Console.WriteLine($"Oqim {id} resursga ega bo'ldi");
        Thread.Sleep(1000); // resurs bilan ishlash
        Console.WriteLine($"Oqim {id} resursni bo'shatmoqda");
        semaphore.Release(); // resursni bo'shatish
    }

    static void Main()
    {
        for (int i = 1; i <= 5; i++)
        {
            int localId = i;
            new Thread(() => AccessResource(localId)).Start();
        }
    }
}

Shu tarzda, semafor resurs bilan ishlayotgan oqimlar sonini cheklaydi, raqobat shartlarini oldini oladi va to'g'ri ishlashni ta'minlaydi.