Sobes.tech
Middle+

Semaphore синхрондоштуруу primitive эмне?

sobes.tech AI

AIден жооп

Semaphore — бул синхрондоштуруу primitive, ал чектелген ресурстар пулуна кирүүнү көзөмөлдөйт. Ал эсептегичти кармайт, ал бир убакта ресурска кире алчу түзүлүштөрдүн санын аныктайт.

Негизги операциялар:

  • WaitOne (же WaitAsync асинхрон код үчүн): Эсептегичти азайтат, эгер ал нөлдөн чоң болсо. Эсептегич нөлгө барабар болсо, түзүлүш токтоп калат, андан кийин ал оң мааниге өтөт (башка түзүлүш Release деп чакырат).
  • Release: Эсептегичти көбөйтөт жана күтүп жаткан түзүлүштү бошотушу мүмкүн.

Semaphore түрлөрү:

  • Semaphore: Жүйөлүк (аты менен же аты жок), процесстер ортосунда колдонулушу мүмкүн.
  • SemaphoreSlim: Жеңилдетилген ишке ашыруу, ички процессте колдонуу үчүн арналган. Ички-процесс синхрондоштуруу үчүн артыкчылык берилет.

SemaphoreSlim колдонуу мисалы:

// semaphoreSlim ресурска бир убакта кирүүнү чектөө үчүн колдонулушу мүмкүн
// Бул учурда, 2 түзүлүш бир убакта уруксат берилет
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Семафордун бошотулушун күтөт
    await semaphoreSlim.WaitAsync();
    try
    {
        // Чектелген ресурска кирүү
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} ресурска кирүү");
        await Task.Delay(1000); // Ресурспен иштөө симуляциясы
    }
    finally
    {
        // Семафорду бошотуу
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} ресурсты бошотуу");
        semaphoreSlim.Release();
    }
}