> Как избежать конкурентного доступа к флагу для управления состоянием в Go? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: CloudRu
Стек: Go
> Пример ответа
Для защиты флага от конкурентного доступа в Go используйте атомарные операции из пакета sync/atomic. Это эффективнее мьютексов для простых флагов.
Пример:
GOimport "sync/atomic"type StateManager struct {flag int32 // 0 - выключено, 1 - включено}func (sm *StateManager) SetEnabled() {atomic.StoreInt32(&sm.flag, 1)}func (sm *StateManager) IsEnabled() bool {return atomic.LoadInt32(&sm.flag) == 1}
Альтернативно, для более сложной логики используйте sync.RWMutex:
GOtype StateManager struct {mu sync.RWMutexflag bool}func (sm *StateManager) SetEnabled(v bool) {sm.mu.Lock()defer sm.mu.Unlock()sm.flag = v}func (sm *StateManager) IsEnabled() bool {sm.mu.RLock()defer sm.mu.RUnlock()return sm.flag}
Выбор зависит от сценария: atomic - для простых операций чтения/записи, мьютекс - если нужна синхронизация нескольких полей или сложные условия.
> Похожие задачи по Go
Для чего нужен метод Close в Go?
Может ли приложение работать в нескольких процессах?
Можно ли вызвать метод из импортированной библиотеки в другом пакете в Go
В каком порядке и синхронно или асинхронно выполнять запись данных
> Похожие задачи по backend
Для чего нужен метод Close в Go?
Может ли приложение работать в нескольких процессах?
Можно ли вызвать метод из импортированной библиотеки в другом пакете в Go
В каком порядке и синхронно или асинхронно выполнять запись данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью