JavaRush
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Busy-wait vs blocking

    C++ SELF
    70 уровень,0 лекция
    Разбираем, чем отличается «ожидание на крутилке» ( busy-wait/ polling) от нормального блокирующего ожидания: почему цикл while(! ready) вреден для CPU и батареи, чем компромиссно sleep_for-polling, и какую модель ожидания дает std::condition_variable с wait(lock, predicate).
    Открыта
  • std::condition_variable: wait(lock, predicate)

    C++ SELF
    70 уровень,1 лекция
    Разбираем, зачем в C++ нужен std::condition_variable даже при наличии std::mutex, почему мы «ждём состояние, а не сигнал», и как правильно использовать wait(lock, predicate) со std::unique_lock. Закрепляем паттерн на примерах с флагом ready, очередью задач и «токенами», обсуждаем notify_one()/ notify_all() и типичные ошибки (голый wait(lock), побочные эффекты в предикате, доступ к состоянию без мьютекса).
    Открыта
  • Producer–consumer — очередь задач и поток‑работник

    C++ SELF
    70 уровень,2 лекция
    Разбираем классическую модель producer–consumer в C++: как организовать очередь задач на базе std::queue под std::mutex, как «усыплять» worker через std::condition_variable и wait(lock, predicate), почему важна граница критической секции («взял задачу — отпустил замок»), и какие ошибки чаще всего ломают протокол (busy-wait, чтение empty() без замка, потерянные уведомления, ссылки на удалённые элементы).
    Открыта
  • Ложные пробуждения — почему predicate обязателен

    C++ SELF
    70 уровень,3 лекция
    Разбираем, почему std::condition_variable может «проснуться» без notify_one()/ notify_all(), чем опасен антипаттерн if + wait, как избежать spurious wakeup и lost wakeup с помощью wait(lock, predicate) (или ручного while), и как собрать корректную очередь задач с протоколом «работа или закрытие» ( TaskQueue::pop()/ close()).
    Открыта
  • Shutdown protocol — как остановить worker thread

    C++ SELF
    70 уровень,4 лекция
    Разбираем протокол корректной остановки worker thread в C++: почему ожидание на std::condition_variable через cv.wait может быть вечным, как добавить состояние closed и правильно ждать по предикату closed || ! q.empty(), зачем на shutdown почти всегда нужен notify_all(), и как сделать читаемый pop(), который возвращает std::optional<T> / std::nullopt, чтобы цикл worker’а завершался честно и без потери задач.
    Открыта
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush