Junior — Middle
99
Кадом усулҳо ва воситаҳоро барои пешгирии шароити рақобат дар таҳияи 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 могло бы быть меньше из-за одновременного доступа и перезаписи.