Junior — Middle
Semafor nima ekanligini va u qanday qilib iplar sinxronizasiyasini boshqarishda ishlatilishini tushuntiring.
sobes.tech AI
AIdan javob
Semafor — bu umumiy resursga kirishni boshqarish uchun ishlatiladigan sinxronizatsiya primitive.
U resursga bir vaqtning o'zida qancha oqim kirishi mumkinligini ko'rsatadigan hisoblagichni o'z ichiga oladi.
- Agar hisoblagich noldan katta bo'lsa, oqim kirishi mumkin va hisoblagichni 1 ga kamaytiradi.
- Agar hisoblagich nolga teng bo'lsa, oqim bloklanadi va boshqa oqim resursni bo'shatishini kutadi.
C# da semafor Semaphore yoki SemaphoreSlim sinfi bilan ifodalanadi.
SemaphoreSlim dan foydalanish misoli:
using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // maksimal 2 oqim bir vaqtning o'zida
static void AccessResource(int id)
{
Console.WriteLine($"Oqim {id} resursga kirishni kutmoqda");
semaphore.Wait(); // kirish so'rovi
Console.WriteLine($"Oqim {id} resursga ega bo'ldi");
Thread.Sleep(1000); // resurs bilan ishlashni simulyatsiya qilish
Console.WriteLine($"Oqim {id} resursni bo'shatmoqda");
semaphore.Release(); // resursni bo'shatish
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
Ushbu misolda, maksimal ikki oqim bir vaqtning o'zida resurs bilan ishlay oladi, qolganlari navbatini kutadi.