Avatar ·

std::unique_lock vs std::lock_guard: o que escolher para mutex em C++?

Olá! Comecei a estudar multithreading em C++11 e fiquei confuso na escolha entre std::unique_lock e std::lock_guard. Ambas as classes são usadas para travar o mutex, mas não entendo em quais casos usar cada uma.\n\nPor exemplo, estou escrevendo um contador thread-safe simples:\n\n```cpp\n#include \n#include \n#include \n\nstd::mutex mtx;\nint counter = 0;\n\nvoid increment() {\n for (int i = 0; i < 100000; ++i) {\n // O que é melhor aqui?\n std::lock_guard lock(mtx);\n // ou\n std::unique_lock lock(mtx);\n ++counter;\n }\n}\n```\n\nAmbas as opções compilam e funcionam. Mas ouvi dizer que unique_lock é "mais pesado". Quando devo usá-lo? Existem situações onde lock_guard não é adequado? E por que em