Sobes.tech
Назад к вопросам
Middle+
5

Как решить проблему race condition при одновременном добавлении товаров в одну корзину из разных горутин?

Компании, где спрашивали
КуперКупер

Ответ от нейросети

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)

Альтернативно можно использовать каналы для последовательной обработки изменений корзины, но мьютекс — более прямой и простой способ.