Добавить в корзинуПозвонить
Найти в Дзене
CODERIKK

🔹 Гонка состояний: кто успеет первым

? 🔹 Что такое race condition и почему порядок (order) операций ломает результат? 🔸 Race condition — ошибка, когда параллельные задачи меняют общее состояние без синхронизации; результат зависит от непредсказуемого порядка выполнения, и данные «теряются» или становятся неконсистентными. 🔸 Симптомы: нерепродуцируемые баги, пропавшие обновления, поведение меняется с нагрузкой; встречается в потоках, процессах, асинхронном коде и транзакциях. 🔸 Locking и mutex (mutual exclusion — взаимное исключение) решают проблему, сериализуя доступ к критической секции. Минусы: задержки, contention и риск deadlock — держите секции короткими. 🔸 Минипример (Python): сначала race, затем защита mutex'ом. import threading cnt = 0 def inc(): global cnt for _ in range(100000): cnt += 1 threads = [threading.Thread(target=inc) for _ in range(4)] for t in threads: t.start() for t in threads: t.join() print(cnt) # обычно < 400000 из-за race condition # фикс с mutex cnt = 0 lock = threading.Lock() def

🔹 Гонка состояний: кто успеет первым?

🔹 Что такое race condition и почему порядок (order) операций ломает результат?

🔸 Race condition — ошибка, когда параллельные задачи меняют общее состояние без синхронизации; результат зависит от непредсказуемого порядка выполнения, и данные «теряются» или становятся неконсистентными.

🔸 Симптомы: нерепродуцируемые баги, пропавшие обновления, поведение меняется с нагрузкой; встречается в потоках, процессах, асинхронном коде и транзакциях.

🔸 Locking и mutex (mutual exclusion — взаимное исключение) решают проблему, сериализуя доступ к критической секции. Минусы: задержки, contention и риск deadlock — держите секции короткими.

🔸 Минипример (Python): сначала race, затем защита mutex'ом.

import threading

cnt = 0

def inc():

global cnt

for _ in range(100000):

cnt += 1

threads = [threading.Thread(target=inc) for _ in range(4)]

for t in threads: t.start()

for t in threads: t.join()

print(cnt) # обычно < 400000 из-за race condition

# фикс с mutex

cnt = 0

lock = threading.Lock()

def inc2():

global cnt

for _ in range(100000):

with lock:

cnt += 1

📚 Для middle: сначала попробуйте блокировки; если узкое место — переходите на атомарные операции, очереди или транзакции.

#CODERIKK #ErikkKollil #Middle

➡️ Мы в Telegram - Сетке - ВК

Буду рад вашей реакции здесь⬇️