Back to questions
Купер
Middle+
4
Как решить проблему race condition при одновременном добавлении товаров в одну корзину из разных горутин?
Companies where asked
Answer from AI
sobes.tech AI
Проблему race condition при одновременном добавлении товаров в одну корзину из разных горутин в Go можно решить с помощью синхронизации доступа к общей структуре данных. Самый простой способ — использовать мьютекс (sync.Mutex) для защиты критической секции, где происходит изменение корзины.
Пример:
import (
"sync"
)
type Cart struct {
mu sync.Mutex
items map[string]int
}
func (c *Cart) AddItem(productID string, quantity int) {
c.mu.Lock()
defer c.mu.Unlock()
c.items[productID] += quantity
}
// Использование
cart := &Cart{items: make(map[string]int)}
// В разных горутинах
// go cart.AddItem("product1", 2)
// go cart.AddItem("product1", 3)
Альтернативно можно использовать каналы для последовательной обработки изменений корзины, но мьютекс — более прямой и простой способ.