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();

Согласно Common Weakness Enumeration, потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как CWE-413, CWE-833.


Найденные ошибки

Проверено проектов
410
Собрано ошибок
14 111

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять