Junior — Middle
Семафор деген эмне жана ал ресурстарга кирүүнү кантип көзөмөлдөйт?
sobes.tech AI
AIден жооп
Семафор — бул синхрондоштуруу механизми, ал көптөгөн жиптер колдонмолорунда жалпы ресурска кирүүнү көзөмөлдөө үчүн колдонулат. Ал эсептегичти камтыйт, ал көрсөтөт, канча жиптер бир убакта ресурска кире алат.
Ишке ашыруу принциби:
- Башында, эсептегич жеткиликтүү ресурстардын санына коюлат (мисалы, 3).
- Жип кирүүнү кааласа, ал
Wait(же C#даWaitOne) операциясын чакырат, ал эсептегичти 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();
}
}
}
Мындайча айтканда, семафор бир убакта ресурсту иштетип жаткан жиптердин санын чектейт, атаандаштык шарттарды алдын алат жана туура иштешти камсыздайт.