Middle+
Wie löst man das Problem des Race Conditions beim gleichzeitigen Hinzufügen von Artikeln zu einem Warenkorb aus verschiedenen Goroutines?
sobes.tech KI
Antwort von 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)
Альтернативно можно использовать каналы для последовательной обработки изменений корзины, но мьютекс — более прямой и простой способ.