Sobes.tech
Junior — Middle
88

Семафорлар дегеніміз не және олар бағдарламалауда ағындарды басқаруда қалай қолданылады.

Сұралған компаниялар
OZONOZON

AI-дан жауап

sobes.tech AI

Семафор — бұл көп ағынды қосымшаларда ортақ ресурстарға қол жеткізуді басқару үшін қолданылатын синхрондау механизмі. Ол бір уақытта бірнеше ағын ресурсты пайдалана алатындығын көрсететін есептегішті қамтиды.

Негізгі ұғымдар:

  • Егер есептегіш нөлден үлкен болса, ағын кіріп, есептегішті 1-ге кемітеді.
  • Егер есептегіш нөлге тең болса, ағын блокталып, басқа ағын ресурсты босатқанша күтеді.
  • Ағын ресурспен жұмысын аяқтағанда, ол есептегішті арттырады, бұл басқа ағындарға жұмыс істеуге мүмкіндік береді.

C# тілінде SemaphoreSlim қолдану мысалы:

using System;
using System.Threading;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(2); // бір уақытта максимум 2 ағын

    static void AccessResource(int id)
    {
        Console.WriteLine($"Ағын {id} күтуде");
        semaphore.Wait(); // қол жеткізуді сұрау
        Console.WriteLine($"Ағын {id} қол жеткізді");
        Thread.Sleep(1000); // ресурспен жұмыс істеуді имитациялау
        Console.WriteLine($"Ағын {id} ресурсты босатуда");
        semaphore.Release(); // ресурсты босату
    }

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

Бұл мысалда бір уақытта екі ағын ғана ресурсқа жұмыс істей алады, қалғандары кезек күтеді.