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

The analyzer has detected an incorrect use of a mutex wrapper \(std::unique\_lock, etc\)\.

Consider the following example:

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

Here, in the second line, an exception 'std::system\_error' will be thrown since there is no mutex associated with the wrapper\. It should either be passed in the constructor:

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

or initialized by the 'swap\(\)' method:

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

This diagnostic also detects cases where a critical section is declared but the mutex is not locked for some reason:

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