Senior
42
Jak zaimplementować prosty mechanizm blokady (lock) w pamięci w celu ochrony przed dostępem współbieżnym bez użycia zewnętrznych zależności?
Firmy, w których zadano pytania
Яндекс
Odpowiedź od AI
sobes.tech AI
В Python для реализации простого механизма блокировки в памяти без внешних зависимостей можно использовать встроенный модуль threading и класс Lock. Он обеспечивает взаимное исключение (mutex), позволяя защитить критическую секцию от одновременного доступа из разных потоков.
Пример:
import threading
lock = threading.Lock()
shared_resource = 0
def critical_section():
global shared_resource
with lock: # блокировка
# критическая секция
temp = shared_resource
temp += 1
shared_resource = temp
# Запуск нескольких потоков
threads = [threading.Thread(target=critical_section) for _ in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
print(shared_resource) # Ожидается 10
Если нужна блокировка между процессами, можно использовать multiprocessing.Lock. Для более низкоуровневых или специфичных случаев можно реализовать spinlock на основе атомарных операций, но это сложнее и редко нужно.