Дополнительные фигурные скобки просто используются для создания дополнительных блоков областей действия , чтобы ограничить время жизни std::unique_lock
объектов. Объекты разрушаются, освобождая свои блокировки, когда они go выходят за рамки.
[&](AsyncDetail& detail) {
{ // <-- new scope created here
std::unique_lock<std::mutex> lock(tls_loggers_registerd_mutex_);
for (auto tls_logger : tls_loggers_registerd_) {
CollectTlsLoggerStats(tls_logger);
}
} // <-- lock destroyed here
//2.
{ // <-- new scope created here
std::unique_lock<std::mutex> lock(tls_logger_orphans_mutex_);
for (auto& orphan : tls_logger_orphans_) {
CollectTlsLoggerStats(orphan.get());
}
} // <-- lock destroyed here
...
}
Это ничем не отличается от фигурных скобок, используемых для тел функций, if
операторов, циклов и т. Д. c. Для создания новых областей можно использовать фигурные скобки, а области можно вкладывать.