Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: concurrency, cond, sync

Как работает sync.Cond и когда он лучше каналов?

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

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

sync.Cond позволяет goroutine ждать определённого условия. Он эффективен, когда нужно будить множество ожидающих goroutine при изменении состояния.

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

sync.Cond используется для ожидания изменения состояния.

Он работает поверх Mutex.

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

  • Wait

  • Signal

  • Broadcast

Пример:

cond := sync.NewCond(&sync.Mutex{})

cond.L.Lock()
for !ready {
		cond.Wait()
}
cond.L.Unlock()

Wait:

  • отпускает mutex

  • блокируется

  • после пробуждения снова захватывает mutex

Signal:

  • будит одну goroutine

Broadcast:

  • будит всех

Когда Cond лучше каналов:

  • много ожидающих goroutine

  • условие может меняться много раз

  • нужен broadcast

Каналы лучше для передачи данных, а sync.Cond для сигнализации изменения состояния.

Вывод:

Cond используется реже каналов, но полезен для сложных сценариев синхронизации.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • Golang

    Golang

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

#concurrency

#cond

#sync

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.