Sobes.tech
Назад к вопросам
Junior — Middle
80

Можешь объяснить, какие типы блокировок существуют и как они работают в многопоточном программировании?

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

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

sobes.tech AI

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

  • Мьютекс (Mutex) — обеспечивает эксклюзивный доступ к ресурсу. Только один поток может захватить мьютекс в данный момент.
  • Рекурсивный мьютекс — позволяет одному и тому же потоку захватывать блокировку несколько раз без взаимной блокировки.
  • Читательско-писательская блокировка (Read-Write Lock) — позволяет нескольким потокам одновременно читать ресурс, но запись возможна только эксклюзивно.
  • Семафор — ограничивает количество потоков, которые могут одновременно получить доступ к ресурсу.
  • Spinlock (активное ожидание) — поток в цикле проверяет доступность блокировки, не переходя в состояние ожидания.

Пример использования мьютекса на Swift:

let lock = NSLock()

func criticalSection() {
    lock.lock()
    // Критическая секция
    lock.unlock()
}

Выбор типа блокировки зависит от задачи и требований к производительности и безопасности.