Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про .NET: semaphore, slim, synchronization, waitasync, kernel

Что такое Semaphore и чем он отличается от SemaphoreSlim?

Проверяет знание примитивов синхронизации в .NET.

Короткий ответ

Semaphore — это обёртка над Win32 Semaphore, работает в межпроцессном и многопоточном окружении, его ожидание через WaitOne() занимает kernel transition. SemaphoreSlim — более лёгкий примитив для одного процесса, использует быстрый асинхронный механизм ожидания (без context switch) и поддерживает WaitAsync для async/await. SemaphoreSlim рекомендуют для синхронизации в управляемых приложениях.

Длинный ответ

Semaphore:

  • new Semaphore(initialCount, maxCount, name) — может работать между процессами.

  • Блокирует через kernel, дорогой.

SemaphoreSlim:

  • new SemaphoreSlim(initialCount, maxCount) — только в одном процессе.

  • Использует spin-wait + kernel fallback, поддерживает WaitAsync.

Использование:

await semaphoreSlim.WaitAsync();
try { /* ... */ }
finally { semaphoreSlim.Release(); }

Вывод:

  • Для асинхронного кода и внутри процесса — SemaphoreSlim.

  • Для межпроцессного синхрона — Semaphore.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • .NET

    .NET

Ключевые слова

#semaphore

#slim

#synchronization

#waitasync

#kernel

Подпишись на C# Developer в телеграм