Back to questions
Senior
3
Как синхронизировать доступ нескольких горутин к общему объекту в куче?
Companies where asked
Магнит Тех
Answer from AI
sobes.tech AI
Для синхронизации доступа нескольких горутин к общему объекту в Go обычно используют механизмы из пакета sync:
- Mutex (
sync.Mutex) — блокирует доступ к ресурсу, позволяя одной горутине работать с объектом, пока другие ждут. - RWMutex (
sync.RWMutex) — позволяет нескольким горутинам читать объект одновременно, но блокирует запись, если кто-то пишет.
Пример с использованием sync.Mutex:
import (
"sync"
)
type SafeCounter struct {
mu sync.Mutex
count int
}
func (c *SafeCounter) Inc() {
c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
func (c *SafeCounter) Value() int {
c.mu.Lock()
defer c.mu.Unlock()
return c.count
}
Таким образом, перед доступом к общему объекту горутина блокирует мьютекс, а после завершения работы — разблокирует. Это предотвращает гонки данных и обеспечивает корректную работу с общими данными.