Sobes.tech
Middle+

Cum se rezolvă problema condiției de cursă atunci când se adaugă simultan produse în același coș din goroutines diferite?

sobes.tech AI

Răspuns de la 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)

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