Sobes.tech
Middle+

Semaphore sinxronizatsiya primitive nima?

sobes.tech AI

AIdan javob

Semaphore — bu sinxronizatsiya primitive, u cheklangan resurslar havzasiga kirishni boshqaradi. U hisoblagichni saqlaydi, bu esa bir vaqtning o'zida resursga kirish mumkin bo'lgan oqimlar sonini belgilaydi.

Asosiy operatsiyalar:

  • WaitOne (yoki asinxron kod uchun WaitAsync): Agar hisoblagich noldan katta bo'lsa, uni kamaytiradi. Agar hisoblagich noldan teng bo'lsa, oqim bloklanadi, hisoblagich musbat bo'lib qolguncha (boshqa oqim Release chaqiradi).
  • Release: Hisoblagichni oshiradi va kutayotgan oqimni ochishi mumkin.

Semaphore turlari:

  • Semaphore: Tizim (nomli yoki nomsiz), jarayonlar o'rtasida ishlatilishi mumkin.
  • SemaphoreSlim: Yengil versiya, jarayon ichida foydalanish uchun mo'ljallangan. Ichki jarayon sinxronizatsiyasi uchun afzalroq.

SemaphoreSlim dan foydalanish misoli:

// semaphoreSlim resursga bir vaqtning o'zida kirishni cheklash uchun ishlatilishi mumkin
// Bu holda, 2 oqim bir vaqtning o'zida ruxsat etilgan
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Semafor bo'sh bo'lishini kutadi
    await semaphoreSlim.WaitAsync();
    try
    {
        // Cheklangan resursga kirish
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursga kirmoqda");
        await Task.Delay(1000); // Resurs bilan ishlashni simulyatsiya qilish
    }
    finally
    {
        // Semaforni bo'shatadi
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursni bo'shatmoqda");
        semaphoreSlim.Release();
    }
}