Junior — Middle
Semafor nima ekanligini va u resurslarga kirishni qanday nazorat qilish uchun ishlatilishini tushuntirib bera olasizmi?
sobes.tech AI
AIdan javob
Semafor — bu umumiy resursga kirishni nazorat qilish uchun ishlatiladigan sinxronizatsiya mexanizmi. U hisoblagichni o'z ichiga oladi va bu hisoblagich, bir vaqtning o'zida qancha oqim resursga kirishi mumkinligini ko'rsatadi.
Ishlash prinsipi:
- Dastlab, hisoblagich mavjud resurslar soniga sozlanadi (masalan, 3).
- Oqim kirishni xohlaganda, u
Wait(yoki C# daWaitOne) operatsiyasini chaqiradi, bu hisoblagichni 1 ga kamaytiradi. - Agar hisoblagich 0 dan kichik bo'lsa, oqim bloklanadi va resurs bo'shatilishini kutadi.
- Oqim resursni bo'shatganda, u
Releaseni chaqiradi, hisoblagichni oshiradi va kutayotgan oqimlarni ochadi.
C# misoli:
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // maksimal 3 oqim bir vaqtning o'zida
static void AccessResource(int id)
{
Console.WriteLine($"Oqim {id} resursga kirishni kutmoqda");
semaphore.WaitOne(); // kirish so'rovi
Console.WriteLine($"Oqim {id} resursga ega bo'ldi");
Thread.Sleep(1000); // resurs bilan ishlash
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();
}
}
}
Shu tarzda, semafor resurs bilan ishlayotgan oqimlar sonini cheklaydi, raqobat shartlarini oldini oladi va to'g'ri ishlashni ta'minlaydi.