互斥锁
1. 定义
-
互斥算法避免多个线程同时访问共享资源,并提供线程间的同步支持。
-
头文件:< mutex >
-
理解:通过设置一个互斥量,在一个线程中对它进行上锁,则在未解锁前,其他任何一个线程遇到该互斥量时都会堵塞,直到原线程对它进行解锁,其他线程才会被响应
2. 使用
(1)简单用法
mutex m;
m.lock();
sharedVariable= getVar();
m.unlock();
- 缺点需要手动上锁和解锁,当关键部分抛出异常或程序员只是忘记解锁互斥锁,则会出现死锁
(2)高级用法
{
std::mutex m,
std::unique_lock<std::mutex> autolock(m);
sharedVariable= getVar();
}
- {}代表智能锁指针的声明周期,初始化时会自动上锁,当生命周期结束时,会自动解锁,避免了上述缺点