Sobes.tech
Back to questions
Middle
4

Расскажи про виды блокировок.

Companies where asked
ИП Ганус Александр Андреевич

Answer from AI

sobes.tech AI

В Python существуют разные виды блокировок (locks), которые используются для синхронизации потоков и предотвращения состояния гонки:

  1. threading.Lock — базовая блокировка (мьютекс). Позволяет одному потоку захватить блокировку, другие потоки ждут её освобождения.

  2. threading.RLock (Reentrant Lock) — рекурсивная блокировка, которую может захватить один и тот же поток несколько раз без взаимной блокировки.

  3. threading.Semaphore — счётчик, позволяющий ограничить количество потоков, одновременно выполняющих определённый участок кода.

  4. threading.Event — не совсем блокировка, но механизм для уведомления потоков о наступлении события.

  5. 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

Таким образом, блокировки помогают избежать одновременного доступа к общим ресурсам и обеспечивают корректность работы многопоточных программ.