Sobes.tech
Back to questions
Junior — Middle
85

Можешь ли ты перечислить типы мьютексов и их особенности?

Answer from AI

sobes.tech AI

В C/C++ существуют разные типы мьютексов, которые отличаются по поведению и применению:

  • std::mutex — базовый мьютекс, обеспечивает взаимное исключение. Если поток пытается захватить уже занятый мьютекс, он блокируется до освобождения.

  • std::timed_mutex — расширение std::mutex, позволяет попытаться захватить мьютекс с таймаутом, чтобы избежать бесконечного ожидания.

  • std::recursive_mutex — позволяет одному и тому же потоку захватывать мьютекс несколько раз без взаимной блокировки. Важно освобождать мьютекс столько же раз, сколько он был захвачен.

  • std::shared_mutex (C++17) — поддерживает разделяемый (shared) и эксклюзивный (unique) доступ. Несколько потоков могут одновременно захватывать shared lock для чтения, но только один — unique lock для записи.

  • std::recursive_timed_mutex — сочетает рекурсивность и таймауты.

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

#include <mutex>
std::mutex mtx;

void critical_section() {
    mtx.lock();
    // критическая секция
    mtx.unlock();
}

Для более безопасного кода рекомендуется использовать std::lock_guard или std::unique_lock, которые автоматически освобождают мьютекс.