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
}
Таким образом, сама структура не гарантирует безопасность, её нужно специально защищать.