Sobes.tech
Back to questions
Senior
1

Как реализовать простой механизм блокировки (lock) в памяти для защиты от конкурентного доступа без использования внешних зависимостей?

Companies where asked
Яндекс

Answer from 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 на основе атомарных операций, но это сложнее и редко нужно.