C++ · Intermediário · Inglês · Técnico
lock guard
Classe RAII que trava um mutex na construção e o destrava na destruição, ao sair do escopo. Garante o unlock mesmo se ocorrer uma exceção ou um return antecipado.
Onde usar
É o jeito padrão de proteger uma seção crítica. Para travar vários mutexes sem deadlock, usa-se std::scoped_lock; para destravar manualmente, std::unique_lock.
Em código
std::mutex a, b;
void f() {
std::lock_guard<std::mutex> g(a);
// seção crítica de a
}
void g2() {
std::scoped_lock lk(a, b); // C++17
}Exemplos
Use a lock guard instead of calling lock by hand.
Use um lock guard em vez de chamar lock na mão.
The guard unlocks when the function returns.
O guard destrava quando a função retorna.
Cuidado
Sem nome de variável, o guard vira um temporário destruído na hora e não protege nada.
Sinônimos
guard de mutex