std::unique_lock vs std::lock_guard: qué elegir para un mutex en C++?
¡Hola! Empecé a estudiar multithreading en C++11 y me confundí al elegir entre std::unique_lock y std::lock_guard. Ambas clases se usan para bloquear un mutex, pero no entiendo en qué casos aplicar cada una.
Por ejemplo, estoy escribiendo un contador thread-safe simple:
```cpp
#include
#include
#include
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 100000; ++i) {
// ¿Qué es mejor aquí?
std::lock_guard lock(mtx);
// o
std::unique_lock lock(mtx);
++counter;
}
}
```
Ambas opciones compilan y funcionan. Pero he oído que unique_lock es "más pesado". ¿Cuándo debería usarlo? ¿Hay situaciones donde lock_guard no es adecuado? ¿Y por qué en la biblioteca estándar hay dos clases similares? Explíquenlo, por favor, con ejemplos.
¡Gracias de antemano por la ayuda!
<<>>
Respuesta breve
Usa std::lock_guard