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();
}
}