Junior — Middle
Կարող եք բացատրել, թե ինչ է սեմաֆորն ու ինչպես է այն օգտագործվում ռեսուրսների մուտքը վերահսկելու համար?
sobes.tech AI
Պատասխան AI-ից
Սեմաֆորն այն մեխանիզմն է սինխրոնիզացիայի, որը օգտագործվում է ընդհանուր ռեսուրսին մուտքի վերահսկման համար բազմատող ծրագրերում: Այն պարունակում է հաշվիչ, որը ցույց է տալիս, թե քանի թել կարող է միաժամանակ մուտք ունենալ ռեսուրս:
Աշխատանքի սկզբունքը՝
- Սկզբում հաշվիչը սահմանվում է հասանելի ռեսուրսների թվին (օրինակ՝ 3):
- Երբ թելը ցանկանում է մուտք գործել, նա կանչում է
Wait(կամWaitOneC#-ում), որը նվազեցնում է հաշվիչը 1-ով: - Եթե հաշվիչը դառնում է փոքր, քան զրոն, թելը բլոկվում է և սպասում է, մինչև ռեսուրսը ազատվի:
- Երբ թելը ազատում է ռեսուրսը, նա կանչում է
Release, որը մեծացնում է հաշվիչը և բացում սպասող թելերը:
C#-ի օրինակ՝
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // առավելագույնը 3 թել միաժամանակ
static void AccessResource(int id)
{
Console.WriteLine($"Թել {id} սպասում է մուտքին");
semaphore.WaitOne(); // մուտքի պահանջ
Console.WriteLine($"Թել {id} ստացել է մուտքը");
Thread.Sleep(1000); // աշխատանք ռեսուրսով
Console.WriteLine($"Թել {id} ազատում է ռեսուրսը");
semaphore.Release(); // ռեսուրսի ազատում
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
Այսպիսով, սեմաֆորը սահմանափակում է միաժամանակ ռեսուրսի հետ աշխատող թելերի քանակը, կանխում է մրցակցային պայմանները և ապահովում ճիշտ աշխատանքը։