Sobes.tech
Back to questions
Junior — Middle
64

Объясните, что представляют собой семафоры и как они используются в управлении потоками в программировании.

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

Семафор — это механизм синхронизации, используемый для управления доступом к общим ресурсам в многопоточных приложениях. Он содержит счётчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу.

Основные моменты:

  • Если счётчик больше нуля, поток может войти и уменьшить счётчик на 1.
  • Если счётчик равен нулю, поток блокируется и ждёт, пока другой поток не освободит ресурс.
  • Когда поток заканчивает работу с ресурсом, он увеличивает счётчик, позволяя другим потокам продолжить.

Пример на C# с использованием SemaphoreSlim:

using System;
using System.Threading;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(2); // максимум 2 потока одновременно

    static void AccessResource(int id)
    {
        Console.WriteLine($"Поток {id} ожидает доступа");
        semaphore.Wait(); // запрос доступа
        Console.WriteLine($"Поток {id} получил доступ");
        Thread.Sleep(1000); // имитация работы с ресурсом
        Console.WriteLine($"Поток {id} освобождает ресурс");
        semaphore.Release(); // освобождение ресурса
    }

    static void Main()
    {
        for (int i = 1; i <= 5; i++)
        {
            int threadId = i;
            new Thread(() => AccessResource(threadId)).Start();
        }
    }
}

В этом примере не более двух потоков одновременно могут работать с ресурсом, остальные ждут своей очереди.