Sobes.tech
Назад к вопросам
Middle+
2

Расскажи про локи и семафоры. Для чего нужны локи, в чём разница между многопоточным и асинхронным режимом?

Компании, где спрашивали
X5 techX5 tech

Ответ от нейросети

sobes.tech AI

Локи (mutex) и семафоры — это механизмы синхронизации для управления доступом к общим ресурсам в многопоточных или конкурентных программах.

Лок (mutex) — это примитив, который позволяет только одному потоку (или задаче) владеть ресурсом в конкретный момент времени. Если другой поток пытается захватить лок, он блокируется до освобождения.

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


Разница между многопоточным и асинхронным режимом:

  • Многопоточный режим — это когда несколько потоков ОС выполняются параллельно или конкурентно, каждый может блокироваться и ждать.
  • Асинхронный режим (например, async/await) — это кооперативная многозадачность, где задачи не блокируют поток, а при ожидании операции передают управление обратно планировщику.

В многопоточном режиме локи и семафоры нужны для предотвращения гонок и обеспечения целостности данных. В асинхронном режиме часто используют другие примитивы (например, asyncio.Lock в Python), которые не блокируют поток, а приостанавливают корутину.

Пример локов в Python:

import threading

lock = threading.Lock()

with lock:
    # критическая секция
    pass

Пример асинхронного локa:

import asyncio

lock = asyncio.Lock()

async def critical_section():
    async with lock:
        # асинхронная критическая секция
        pass