Когда я должен предпочесть первый кусок кода ко второму, и имеют ли они фундаментальные различия
std::mutex mtx;
mtx.lock();
... //protected stuff
mtx.unlock();
... //non-protected stuff
mtx.lock();
... //etc
и
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
... //protected stuff
lck.unlock();
... //non-protected stuff
lck.lock();
... //etc
Я понимаю, что lock_guard - это, по сути, уникальный_lock без функций блокировки и разблокировки, но мне трудно дифференцировать мьютекс и блокировку с помощью мьютекса.