Sobes.tech
Middle+

Semaphore sinxronizasiya primitive nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Semaphore — bu sinxronizasiya primitive, o məhdud resurslar hovuzuna girişə nəzarət edir. O, sayğac saxlayır və bu, eyni zamanda resursa giriş edə biləcək iş parçacığı sayını müəyyən edir.

Əsas əməliyyatlar:

  • WaitOne (və ya asinxron kod üçün WaitAsync): Sayğacı azaldır, əgər o sıfırdan böyükdürsə. Əgər sayğac sıfırdırsa, iş parçacığı bloklanır və sayğac müsbətə çevrilənə qədər gözləyir (başqa bir iş parçacığı Release çağırır).
  • Release: Sayğacı artırır və gözləyən iş parçacığını azad edə bilər.

Semaphore növləri:

  • Semaphore: Sistem səviyyəsində (adlı və ya adı olmayan), proseslər arasında istifadə oluna bilər.
  • SemaphoreSlim: Yüngül versiya, proses daxilində istifadə üçün nəzərdə tutulmuşdur. Daxili proseslərarası sinxronizasiya üçün üstünlük verilir.

SemaphoreSlim istifadə nümunəsi:

// semaphoreSlim resursa eyni zamanda giriş sayını məhdudlaşdırmaq üçün istifadə edilə bilər
// Bu halda, eyni zamanda 2 iş parçacığı icazə verilir
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Semaforun sərbəst buraxılmasını gözləyir
    await semaphoreSlim.WaitAsync();
    try
    {
        // Məhdud resursa giriş
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursa daxil olur");
        await Task.Delay(1000); // Resursla işləmənin simulasyonu
    }
    finally
    {
        // Semaforu sərbəst buraxır
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursu sərbəst buraxır");
        semaphoreSlim.Release();
    }
}