Middle+
რა არის Semaphore სინქრონიზაციის primitive?
sobes.tech AI
პასუხი AI-სგან
Semaphore — ეს სინქრონიზაციის primitive, რომელიც მართავს შეზღუდული რესურსების პულზე წვდომას. ის ინახავს გამოთვლას, რომელიც განსაზღვრავს, რამდენი ნაკადი შეუძლია ერთდროულად მიაღწიოს რესურსს.
ძირითადი ოპერაციები:
WaitOne(ანWaitAsyncასინქრონული კოდისათვის): ამცირებს გამოთვლას, თუ ის მეტია ნულზე. თუ გამოთვლა ნულია, ნაკადი ბლოკდება მანამ, სანამ გამოთვლა დადებითს არ გახდის (სხვა ნაკადი გამოიძახებსRelease).Release: ზრდის გამოთვლას და შეუძლია გამოტოვოს მოლოდინში მყოფი ნაკადი.
Semaphore ტიპები:
Semaphore: სისტემური (სახელით ან სახელწოდების გარეშე), შეიძლება გამოყენებულ იქნას პროცესებს შორის.SemaphoreSlim: მსუბუქი რეალიზაცია, განკუთვნილია პროცესის შიგნით გამოყენებისთვის. უპირატესობა აქვს ინტრა-პროცესის სინქრონიზაციისთვის.
SemaphoreSlim-ის გამოყენების მაგალითი:
// semaphoreSlim შეიძლება გამოყენებულ იქნას ერთდროულად წვდომის შეზღუდვისთვის რესურსზე
// ამ შემთხვევაში, ნებადართულია 2 ნაკადი ერთდროულად
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// ელის სემაფორის გათავისუფლებას
await semaphoreSlim.WaitAsync();
try
{
// შეზღუდული რესურსის წვდომა
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} წვდომა რესურსზე");
await Task.Delay(1000); // სამუშაოს სიმულაცია რესურსთან
}
finally
{
// სემაფორის გათავისუფლება
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} რესურსის გათავისუფლება");
semaphoreSlim.Release();
}
}