Расскажи про виды блокировок.
Answer from AI
sobes.tech AI
В Python существуют разные виды блокировок (locks), которые используются для синхронизации потоков и предотвращения состояния гонки:
-
threading.Lock — базовая блокировка (мьютекс). Позволяет одному потоку захватить блокировку, другие потоки ждут её освобождения.
-
threading.RLock (Reentrant Lock) — рекурсивная блокировка, которую может захватить один и тот же поток несколько раз без взаимной блокировки.
-
threading.Semaphore — счётчик, позволяющий ограничить количество потоков, одновременно выполняющих определённый участок кода.
-
threading.Event — не совсем блокировка, но механизм для уведомления потоков о наступлении события.
-
multiprocessing.Lock — блокировка для процессов, используется при работе с несколькими процессами.
Пример использования threading.Lock:
import threading
lock = threading.Lock()
shared_resource = 0
def worker():
global shared_resource
with lock:
# критическая секция
shared_resource += 1
threads = [threading.Thread(target=worker) for _ in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
print(shared_resource) # Ожидается 10
Таким образом, блокировки помогают избежать одновременного доступа к общим ресурсам и обеспечивают корректность работы многопоточных программ.