MutexLock/MutexLockGuard 互斥锁
Condition 条件变量
CountDownLatch 倒计时门闩类
MutexLockGuard 更常用
这种情况如果条件满足,就return了,忘记解锁。
MutexLock mutex;
void f()
{
mutex.lock();
...
if(条件)
{
retutn;
}
mutex.unlock();
}
如果改成这样,就可以解决忘记解锁的问题。
MutexLock mutex;
void f()
{
MutexLockGuard lock(mutex);
...
if(条件)
{
retutn;
}
}
要注意的是:
mutex 和mutexGuard 是关联关系,mutexGuard 没有管理mutex的生命期,只是使用了lock和unlock方法。
它们之间没有存在局部和整体的关系,如果存在局部和整体的关系,就是聚合关系。
不仅仅存在局部和整体关系,还管理生存期,就是组合关系。
Condition条件变量
条件变量使用步骤:
一个线程:
锁住 mutex
while(条件)
等待 ( 做了3件事情,解锁、等待条件变量、加锁)
解锁 mutex
另一个线程:
锁住 mutex
更改条件
解锁 mutex
signal 或 broadcast
CountDownLatch 倒计时门闩类
实际上是对条件变量的封装
既可以用于所有子线程等待主线程发起 “起跑”
也可以用于主线程等待子线程初始化完毕才开始工作
mutable 修饰的成员变量可以被const 函数改变。