# V1018. Usage of a suspicious mutex wrapper. It is probably unused, uninitialized, or already locked.

Анализатор обнаружил ошибку при использовании обёртки над мьютексом (std::unique_lock и т.п.).

Рассмотрим пример:

    std::unique_lock<std::mutex> lck;
    lck.lock();

В данном случае, во второй строке будет брошено исключение 'std::system_error', так как с обёрткой не связан мьютекс. Необходимо передать его в конструкторе:

    std::unique_lock<std::mutex> lck(m, std::defer_lock);
    lck.lock();

или инициализировать методом 'swap()':

    std::unique_lock<std::mutex> lck_global(mtx, std::defer_lock);
    ....
    std::unique_lock<std::mutex> lck;
    lck.swap(lck_global);
    lck.lock();

Также диагностика ищет случаи, когда критическая секция объявлена, но блокировка мьютекса по какой-то причине не выполняется:

    std::unique_lock<std::mutex> lck(m, std::defer_lock);
    //lck.lock();

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.).

Данная диагностика классифицируется как:

CWE-413 CWE-833