Middle+
Semaphore sinxronizatsiya primitive nima?
sobes.tech AI
AIdan javob
Semaphore — bu sinxronizatsiya primitive, u cheklangan resurslar havzasiga kirishni boshqaradi. U hisoblagichni saqlaydi, bu esa bir vaqtning o'zida resursga kirish mumkin bo'lgan oqimlar sonini belgilaydi.
Asosiy operatsiyalar:
WaitOne(yoki asinxron kod uchunWaitAsync): Agar hisoblagich noldan katta bo'lsa, uni kamaytiradi. Agar hisoblagich noldan teng bo'lsa, oqim bloklanadi, hisoblagich musbat bo'lib qolguncha (boshqa oqimReleasechaqiradi).Release: Hisoblagichni oshiradi va kutayotgan oqimni ochishi mumkin.
Semaphore turlari:
Semaphore: Tizim (nomli yoki nomsiz), jarayonlar o'rtasida ishlatilishi mumkin.SemaphoreSlim: Yengil versiya, jarayon ichida foydalanish uchun mo'ljallangan. Ichki jarayon sinxronizatsiyasi uchun afzalroq.
SemaphoreSlim dan foydalanish misoli:
// semaphoreSlim resursga bir vaqtning o'zida kirishni cheklash uchun ishlatilishi mumkin
// Bu holda, 2 oqim bir vaqtning o'zida ruxsat etilgan
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Semafor bo'sh bo'lishini kutadi
await semaphoreSlim.WaitAsync();
try
{
// Cheklangan resursga kirish
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursga kirmoqda");
await Task.Delay(1000); // Resurs bilan ishlashni simulyatsiya qilish
}
finally
{
// Semaforni bo'shatadi
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} resursni bo'shatmoqda");
semaphoreSlim.Release();
}
}