Sobes.tech
Middle
14

Расскажи про пессимистичные и оптимистичные блокировки

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

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

sobes.tech AI

Пессимистичные и оптимистичные блокировки — это подходы к управлению конкурентным доступом к данным.

  • Пессимистичная блокировка предполагает, что конфликты при доступе к данным вероятны, поэтому ресурс блокируется сразу при начале операции, чтобы другие не могли его изменить. Это снижает вероятность конфликтов, но может привести к задержкам и взаимоблокировкам.

  • Оптимистичная блокировка предполагает, что конфликты редки, поэтому данные не блокируются при чтении. При записи проверяется, не изменились ли данные с момента чтения (например, по версии или таймстампу). Если данные изменились, операция откатывается или повторяется.

Пример в Go: для пессимистичной блокировки можно использовать sync.Mutex, а для оптимистичной — проверять версию данных перед записью.

var mu sync.Mutex
var version int
var data string

// Пессимистичная блокировка
func updateDataPessimistic(newData string) {
    mu.Lock()
    defer mu.Unlock()
    data = newData
    version++
}

// Оптимистичная блокировка
func updateDataOptimistic(newData string, oldVersion int) bool {
    if oldVersion != version {
        return false // данные изменились, откат
    }
    data = newData
    version++
    return true
}