Встречается на собеседованиях • сегодня

Зачем нужно синхронизировать потоки, если есть изоляция транзакций в БД

Синхронизация потоков и изоляция транзакций решают разные проблемы. Изоляция транзакций гарантирует целостность данных в БД, но не защищает от race condition в коде приложения. Например, если два потока читают данные, обрабатывают их и записывают обратно, даже с изоляцией транзакций можно получить некорректный результат.

Пример:

python
import threading

balance = 100

def transfer(amount):
    global balance
    current = balance
    current += amount
    balance = current

t1 = threading.Thread(target=transfer, args=(100,))
t2 = threading.Thread(target=transfer, args=(-50,))
t1.start(); t2.start()
t1.join(); t2.join()
print(balance)  # Может быть 150 или 50 вместо ожидаемых 150

Здесь нужна синхронизация через Lock, так как проблема в конкурентном доступе к переменной balance, а не в транзакциях БД.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы