Junior — Middle
Ներկայացրեք, թե ինչ է սեմաֆորն ու ինչպես է այն օգտագործվում թելերի սինխրոնիզացիան կառավարելու համար։
sobes.tech AI
Պատասխան AI-ից
Սեմաֆորն այն primitive-ն է սինխրոնիզացիայի, որը օգտագործվում է ընդհանուր ռեսուրսին մուտքի կառավարում բազմակի հոսքերի կողմից:
Նա պարունակում է հաշվիչ, որը ցույց է տալիս, թե քանի հոսք կարող է միաժամանակ մուտք գործել ռեսուրս:
- Եթե հաշվիչը մեծ է զրոյից, հոսքը կարող է մուտք գործել և նվազեցնել հաշվիչը 1-ով:
- Եթե հաշվիչը զրոյ է, հոսքը բլոկվում է և սպասում է, մինչև մյուս հոսքը ազատի ռեսուրսը:
C#-ում սեմաֆորը ներկայացված է Semaphore կամ SemaphoreSlim դասերով:
Օրինակ SemaphoreSlim-ի օգտագործման:
using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // առավելագույնը 2 հոսք միաժամանակ
static void AccessResource(int id)
{
Console.WriteLine($"Հոսք {id} սպասում է մուտքին");
semaphore.Wait(); // մուտքի պահանջ
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();
}
}
}
Այս օրինակով, առավելագույնը երկու հոսք կարող է աշխատել ռեսուրսի հետ միաժամանակ, մնացածները սպասում են իրենց հերթին։