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 üçünWaitAsync): 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();
}
}