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

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Data race и UB: краткий мост к модели гонок

    C++ SELF
    72 уровень,0 лекция
    Разбираем, почему в C++ гонка данных ( data race) — это не «иногда неверный результат», а формальное Undefined Behavior: компилятор и CPU получают право переупорядочивать операции. Отделяем логическую гонку ( race condition) от гонки данных, разбираем типичные ловушки вроде « join() всё исправит» и « sleep_for поможет», и показываем два базовых способа лечения: std::mutex и std::atomic. В конце — ментальная схема диагностики и список типичных ошибок.
    Открыта
  • Операции std::atomic: load/ store/ exchange/ fetch_*

    C++ SELF
    72 уровень,1 лекция
    Собираем «словарь» базовых операций std::atomic в C++: атомарные чтение/запись через load() и store(), RMW‑операции семейства fetch_add()/ fetch_sub() и побитовые fetch_and()/ fetch_or()/ fetch_xor(), «замена с возвратом» через exchange(), а также условное обновление (CAS) через compare_exchange_weak/ compare_exchange_strong. Разбираем типовые паттерны (тикеты, state machine, атомарный max), mermaid‑схему и частые ошибки, которые приводят к потерянным обновлениям и редким багам.
    Открыта
  • std::memory_order: seq_cst по умолчанию

    C++ SELF
    72 уровень,2 лекция
    Разбираем, зачем в std::atomic существует std::memory_order: чем отличается атомарность от упорядочивания, почему режим std::memory_order::seq_cst используется по умолчанию в load()/ store()/ fetch_add(), где уместен std::memory_order::relaxed (метрики и счётчики), и какие типичные ошибки приводят к редким и трудноуловимым багам в многопоточном коде.
    Открыта
  • Acquire/Release: публикация данных между потоками

    C++ SELF
    72 уровень,3 лекция
    Разбираем протокол публикации данных в модели памяти C++: как связка std::memory_order_release (публикация) и std::memory_order_acquire (подхват) гарантирует видимость подготовленных данных между потоками. Показаны минимальные шаблоны producer/consumer, ключевые инварианты (когда это корректно, а когда начинается data race), сравнение с relaxed/ seq_cst, а также пример с memory_order_acq_rel для операций read-modify-write.
    Открыта
  • wait/notify на атомиках и std::atomic_flag

    C++ SELF
    72 уровень,4 лекция
    Разбираем, как в C++20/23 ждать изменения атомарного значения без прожига CPU: чем std::atomic<T>::wait() лучше spin-wait, как правильно сочетать wait() с notify_one()/ notify_all(), почему ожидание почти всегда оформляют через while, и как публиковать данные с помощью memory_order_release/ memory_order_acquire. Отдельно смотрим минималистичный флаг std::atomic_flag и паттерн “сделать один раз”.
    Открыта
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush