Condition Class (muduo/base/Condition.h)& MutexLock Class,MutexLockGuard Class(muduo/base/Mutex.h)详解

Condition Class (muduo/base/Condition.h)& MutexLock Class,MutexLockGuard Class(muduo/base/Mutex.h)源码阅读

如有问题,欢迎交流!!!

MutexLock Class

单纯是对<pthread.h>下锁的封装,但是在.h文件中有很多宏定义。MutexLock Class有两个数据成员:锁,pthread_mutex_t mutex_和持有锁的线程,pid_t holder_。该类在原有<pthread.h>的基础上,加入了如下功能:在加锁的同时,记录加锁的线程号在解锁时,将记录的线程号归零
另外,MutexLock Class p r i v a t e private private成员中定义了一个类UnassignGuard Class。该类只有一个数据成员MutexLock& owner_,但是该类不进行加锁解锁操作,只是在初始化时,置owner_holder_为0(MutexLock::unassignHolder()),在析构时,置owner_holder_为当前线程号(MutexLock::assignHolder())。也是RAII机制。

MutexLockGuard Class

这个是基于RAII机制对MutexLock的封装,即构造函数加锁,析构函数解锁。内容简单,只有一个构造函数,一个析构函数,和一个MutexLock&类型的变量。

Condition Class

<pthread.h>下条件变量的封装,注意wait()函数,它在调用pthread_cond_wait之前先初始化了UnassignGuard Class的变量。
问题:干嘛要初始化UnassignGuard
解答:pthrad_cond_wait在将当前线程放入条件变量的等待序列后,会解锁,这个时候要修改该锁的MutexLock::holder_ 0 0 0,也就是UnassignGuard Class初始化所进行的工作;在pthread_cond_wait返回时,会加锁,这个时候要修改该锁的MutexLock::holder_为当前线程的线程号。

CountDownLatch Class(闭锁?)

基于条件变量,在线程间同步count_

数据成员

  • mutable MutexLock mutex_

负责保护条件变量condition_和共享数据count_的锁

  • Condition condition_

条件变量

  • int count_

共享数据

函数成员

  • CountDownLatch(int count)

初始化count_

  • wait()

Condition::wait()的封装

  • countDown()

count_进行减一操作,如果count_==0,则调用Condition::notifyAll()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值