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

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Критическая секция — что защищаем и где

    C++ SELF
    69 уровень,0 лекция
    Разбираем, как находить границы критической секции в многопоточном C++: сначала определяем общий ресурс и его инвариант, а уже потом думаем о блокировках (например, std::mutex). На примерах показываем, почему ++ — это не «одна операция», почему чтение ( size(), empty(), average()) тоже участвует в гонках, и как согласованно защищать связанное состояние ( push_back + +=) в компоненте TaskStats.
    Открыта
  • std::mutex + std::lock_guard — RAII‑блокировка

    C++ SELF
    69 уровень,1 лекция
    Разбираем базовую синхронизацию в C++: зачем нужен std::mutex, почему ручные lock()/ unlock() легко приводят к «вечной» блокировке, и как RAII‑подход через std::lock_guard привязывает освобождение мьютекса к области видимости. Покажем, как правильно ограничивать критическую секцию, защитить общий счётчик и даже вывод в std::cout, а также разберём типичные ошибки в работе с блокировками.
    Открыта
  • std::unique_lock и std::scoped_lock — когда нужны

    C++ SELF
    69 уровень,2 лекция
    Разбираем, почему в многопоточном C++ иногда недостаточно std::lock_guard: как std::unique_lock помогает точно управлять временем удержания мьютекса (ранний unlock(), повторный lock(), отложенный захват через std::defer_lock), и как std::scoped_lock безопасно берёт сразу несколько мьютексов одной логической операцией (например, при переводе между счетами). Плюс — практический паттерн “snapshot → compute → commit”, мини-таблица выбора и типичные ошибки.
    Открыта
  • Deadlock: причины и правила предотвращения

    C++ SELF
    69 уровень,3 лекция
    Разбираем, что такое взаимная блокировка ( deadlock) в многопоточном C++: как она возникает из-за разного порядка захвата std::mutex, почему зависание проявляется через бесконечные join(), и как предотвращать проблему дисциплиной блокировок — через единый lock ordering и атомарный захват нескольких мьютексов с std::scoped_lock. Отдельно обсуждаем опасность побочных действий под блокировкой (например, логирование) и практику «снимок под lock → работа без lock».
    Открыта
  • Инкапсуляция синхронизации: “mutex внутри класса”

    C++ SELF
    69 уровень,4 лекция
    Разбираем практику «мьютекс внутри класса»: почему внешний std::mutex почти неизбежно приводит к забытым блокировкам и гонкам данных, как строить самодисциплинирующийся интерфейс через std::lock_guard, зачем в const-методе может понадобиться mutable, и как безопасно читать данные через snapshot(). На примере потокобезопасного TaskLog показываем, как оформлять составные операции ( add_and_size()) и каких ошибок избегать (утечки ссылок на контейнеры, несинхронизированное чтение, слишком долгий lock, риск deadlock при нескольких мьютексах).
    Открыта
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush