std::lock_guard std::mutex 是 C++ 标准库中的一个 RAII(Resource Acquisition Is Initialization)风格的类模板,用于实现互斥锁的自动加锁和解锁。
std::lock_guard 在构造时会锁定传入的互斥锁,并在对象生命周期结束时自动解锁互斥锁。这样可以确保在作用域结束时,互斥锁一定会被正确地解锁,避免了因为程序流程异常或者忘记解锁造成的死锁的风险。
下面是 std::lock_guard 的一个示例用法:
#include
std::mutex mtx;
void someFunction() {
std::lock_guard<std::mutex> lock(mtx); // 在这里加锁
// 在已加锁的情况下进行一些操作
// 作用域结束时,std::lock_guard 对象析构,自动解锁互斥锁
}
在这个示例中,创建了一个名为 lock 的 std::lock_guard 对象,构造函数中传入了互斥锁 mtx。当 std::lock_guard 对象构造时,互斥锁 mtx 将被锁定。随着作用域的结束,lock 对象被销毁时,会自动解锁互斥锁 mtx。
这种使用方式确保了在作用域内的代码执行期间,互斥锁保持被锁定状态,从而达到了线程安全的目的。
需要注意的是,std::lock_guard 对象无法手动解锁,只能在其生命周期结束时自动解锁。如果需要手动解锁互斥锁,可以使用 std::unique_lock 类模板。