muduo库base源码分析五 (进程间通信封装)

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 函数改变。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值