Sobes.tech
Back to questions
Junior — Middle
63

Какие виды блокировок применяются в многопоточном программировании для управления доступом к ресурсам?

Answer from AI

sobes.tech AI

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

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

В Java стандартно используются классы из пакета java.util.concurrent.locks, например, ReentrantLock (рекурсивный мьютекс) и ReadWriteLock.

Пример использования ReentrantLock:

ReentrantLock lock = new ReentrantLock();

lock.lock();
try {
    // критическая секция
} finally {
    lock.unlock();
}