TGViewer
C# | Вопросы собесов C# | Вопросы собесов @easy_c_sharp · 5.01K subscribers
Post #1923 1.03K
🤔 Что такое примитив синхронзиации semaphore?

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

🚩Как работает семафор?

Семафор использует счётчик для отслеживания доступных "разрешений":
Когда поток запрашивает доступ к ресурсу, семафор уменьшает счётчик.
Если счётчик больше нуля, поток получает доступ.
Если счётчик равен нулю, поток блокируется, пока другой поток не освободит ресурс (увеличив счётчик).

🚩Пример использования `SemaphoreSlim`

В .NET часто используется SemaphoreSlim, так как он более лёгкий и эффективный, чем Semaphore.
using System;
using System.Threading;
using System.Threading.Tasks;

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

static async Task AccessResource(int id)
{
Console.WriteLine($"Поток {id} ждёт доступа...");
await semaphore.WaitAsync(); // Захватываем семафор
try
{
Console.WriteLine($"Поток {id} получил доступ!");
await Task.Delay(2000); // Имитация работы с ресурсом
}
finally
{
Console.WriteLine($"Поток {id} освобождает ресурс.");
semaphore.Release(); // Освобождаем семафор
}
}

static async Task Main()
{
Task[] tasks = new Task[5];
for (int i = 0; i < 5; i++)
{
tasks[i] = AccessResource(i);
}
await Task.WhenAll(tasks);
}
}


🚩Обычный `Semaphore`

Если нужна синхронизация между разными процессами, можно использовать Semaphore
Semaphore semaphore = new Semaphore(2, 2, "MyGlobalSemaphore");


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_c_sharp
  1. Oct 14, 2026🤔 Как можно не отслеживать сущность? В Entity Framework можно не отслеживать сущность, чт…
  2. Oct 14, 2026🤔 Какие есть модификаторы доступа? Есть модификаторы доступа, которые определяют, кто мож…
  3. Oct 14, 2026Post #2486
  4. Oct 13, 2026🤔 Что такое Swagger? Swagger (теперь часть OpenAPI): - Это инструмент для документировани…
  5. Oct 13, 2026🤔 Что такое аутентификация? Когда человек вводит логин и пароль, система аутентифицирует…
  6. Oct 13, 2026Тестировщик fullstack: C#-автоматизация и ручные тесты Если вы хотели работать на сильном…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →