Sobes.tech
Back to questions
Junior — Middle
74

Можно ли считать структуру с двумя полями безопасной для использования в многопоточных условиях?

Companies where asked
Цифровая Эволюция

Answer from AI

sobes.tech AI

Структура с двумя полями в Go сама по себе не является потокобезопасной. Без дополнительной синхронизации доступ к полям структуры из нескольких горутин может привести к состояниям гонки.

Если поля структуры не изменяются после инициализации (т.е. структура является неизменяемой), то она безопасна для чтения из нескольких потоков.

Если же поля могут изменяться, то для обеспечения безопасности нужно использовать механизмы синхронизации, например, sync.Mutex или sync.RWMutex.

Пример с mutex:

import "sync"

type SafeStruct struct {
    mu sync.Mutex
    field1 int
    field2 string
}

func (s *SafeStruct) Set(field1 int, field2 string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.field1 = field1
    s.field2 = field2
}

func (s *SafeStruct) Get() (int, string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    return s.field1, s.field2
}

Таким образом, сама структура не гарантирует безопасность, её нужно специально защищать.