(1)std::mutex
是 C++ 标准库中提供的一种用于多线程同步的互斥锁实现。
mutex 用于控制多个线程访问共享资源,确保在任意时刻只有一个线程可以访问该资源,避免数据竞争。线程在访问共享资源之前首先需要锁住 std::mutex
,然后在完成操作后释放锁。这确保了同一时刻只有一个线程可以访问被保护的资源,从而防止多线程并发访问导致的数据不一致性。
(2)std::lock_guard
是 C++ 标准库中提供的一个模板类,用于在其构造时自动获取锁,在析构时自动释放锁。使用 std::lock_guard
的好处是,当 std::lock_guard
对象离开其作用域时,会自动调用析构函数,该析构函数会释放锁。这确保了在任何情况下(包括由于异常等原因导致的提前退出),锁都会被正确释放,从而避免了忘记手动释放锁而导致的死锁问题。
多个线程修改共享数据时,可以这样写:
--------------------------------------------------------
std::mutex myMutex;
共享数据 data;
func(){
std::lock_guard<std::mutex>lock(myMutex);
修改共享数据;
}
------------------------------------------