Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: atomicity, critical section

Почему недостаточно лочить только запись? (check-then-act под замком)

Вопрос проверяет опыт работы с check-then-act

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

Проверка и действие должны быть в одной критической секции. Если проверку делать без блокировки, то два запроса могут пройти проверку и оба записать, нарушив инвариант.

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

Сценарий: «если свободно → занять».

  • Неправильно:

  1. if free(id) — без локов;

  2. lock(); write(); unlock().

  • Между 1 и 2 другой поток тоже прошёл 1.

  • Правильно:

  • внутри одного Lock():

    • проверить условие;

    • выполнить изменение;

    • сохранить состояние;

    • только после этого отпустить замок.

  • Вывод: атомарность — это «проверка+действие», а не только «действие».

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Golang

    Golang

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

#atomicity

#critical section

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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