Sobes.tech
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)

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