Sobes.tech
Middle+

Hoe los je het probleem van raceconditie bij het gelijktijdig toevoegen van producten aan een winkelwagen vanuit verschillende goroutines?

sobes.tech AI

Antwoord van 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)

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