Junior — Middle
106
Python менен иштеп чыгууда жарыш шарттарын алдын алуу үчүн кандай ыкмалар жана инструменттерди колдондуңуз?
Кайсыл жерде компаниялар сурады
Код Открытия
AIден жооп
sobes.tech AI
Для предотвращения условий гонки (race conditions) в Python применяются различные методы синхронизации, особенно при работе с потоками или процессами:
- Lock (блокировка) из модуля
threading— позволяет ограничить доступ к критической секции кода одному потоку. - RLock (рекурсивная блокировка) — позволяет одному потоку многократно захватывать блокировку.
- Semaphore — ограничивает количество потоков, которые могут одновременно выполнять определённый участок кода.
- Queue — потокобезопасная очередь, которая помогает безопасно обмениваться данными между потоками.
Пример использования Lock для защиты общего ресурса:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
with lock:
temp = counter
temp += 1
counter = temp
threads = [threading.Thread(target=increment) for _ in range(1000)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Ожидается 1000
Без блокировки значение counter могло бы быть меньше из-за одновременного доступа и перезаписи.