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

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

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

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

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

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

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

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

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

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