Sobes.tech
Junior — Middle

Semafor nədir və onun resurslara girişin idarə olunmasında necə istifadə olunduğunu izah edə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bir semafor, çox iş parçacıklı tətbiqlərdə ümumi resursa girişin idarə olunması üçün istifadə olunan sinxronizasiya mexanizmidir. O, sayğac saxlayır və bu sayğac, eyni zamanda neçə iş parçacığının resursa daxil ola biləcəyini göstərir.

İş prinsipi:

  • Əvvəlcə, sayğac mövcud resursların sayına qurulur (məsələn, 3).
  • Bir iş parçacığı daxil olmaq istədikdə, Wait (və ya C#-da WaitOne) əməliyyatını çağırır, bu da sayğacı 1 azaldır.
  • Əgər sayğac sıfırdan kiçik olarsa, iş parçacığı bloklanır və resurs sərbəst buraxılana qədər gözləyir.
  • Bir iş parçacığı resursu sərbəst buraxdıqda, Release çağırır, sayğacı artırır və gözləyən iş parçacıqlarını açır.

C# nümunəsi:

using System;
using System.Threading;

class Program
{
    static Semaphore semaphore = new Semaphore(3, 3); // maksimum 3 iş parçacığı eyni vaxtda

    static void AccessResource(int id)
    {
        Console.WriteLine($"İş parçacığı {id} giriş gözləyir");
        semaphore.WaitOne(); // giriş üçün tələb
        Console.WriteLine($"İş parçacığı {id} giriş aldı");
        Thread.Sleep(1000); // resursla işləmə
        Console.WriteLine($"İş parçacığı {id} resursu sərbəst buraxır");
        semaphore.Release(); // resursu sərbəst buraxma
    }

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

Bu şəkildə, semafor eyni vaxtda resursla işləyən iş parçacığı sayını məhdudlaşdırır, yarış şərtlərini qarşısını alır və düzgün işləməni təmin edir.