Sobes.tech
Junior — Senior
59

Оценка проблем конкурентного доступа к пользовательскому балансу

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

Lamoda Tech
Условие задачи

Необходимо рассмотреть представленный псевдокод с точки зрения многопоточного выполнения и выявить потенциальные уязвимости при чтении и изменении баланса пользователя.

func withdrawBalance(uid int32, sum float32) {
    bal := exec('select balance from user u where u.id=$1', uid)
    if bal - sum >= 0.0 {
        exec('update user u set balance=balance-$1', sum)
        return exec('select balance from user u where u.id=$1', uid)
    }
}