Sobes.tech
Junior — Middle

Semafor nima ekanligini va u qanday qilib iplar sinxronizasiyasini boshqarishda ishlatilishini tushuntiring.

sobes.tech AI

AIdan javob

Semafor — bu umumiy resursga kirishni boshqarish uchun ishlatiladigan sinxronizatsiya primitive.

U resursga bir vaqtning o'zida qancha oqim kirishi mumkinligini ko'rsatadigan hisoblagichni o'z ichiga oladi.

  • Agar hisoblagich noldan katta bo'lsa, oqim kirishi mumkin va hisoblagichni 1 ga kamaytiradi.
  • Agar hisoblagich nolga teng bo'lsa, oqim bloklanadi va boshqa oqim resursni bo'shatishini kutadi.

C# da semafor Semaphore yoki SemaphoreSlim sinfi bilan ifodalanadi.

SemaphoreSlim dan foydalanish misoli:

using System;
using System.Threading;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(2); // maksimal 2 oqim bir vaqtning o'zida

    static void AccessResource(int id)
    {
        Console.WriteLine($"Oqim {id} resursga kirishni kutmoqda");
        semaphore.Wait(); // kirish so'rovi
        Console.WriteLine($"Oqim {id} resursga ega bo'ldi");

        Thread.Sleep(1000); // resurs bilan ishlashni simulyatsiya qilish

        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();
        }
    }
}

Ushbu misolda, maksimal ikki oqim bir vaqtning o'zida resurs bilan ishlay oladi, qolganlari navbatini kutadi.