boost 互斥体和锁

 1、共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙。这就对应着互斥体的lock(取钥匙)和unlock(还钥匙)。 

2、考虑下面的场景:还钥匙的时候出现异常,会发生什么? 

  导致死锁,因为钥匙归还失败,所有人都没法再取到钥匙。 

3、如何解决这个问题? 

  想一下,动态分配内存存在类似的情况。如果忘记delete,会导致内存泄漏。它是如何解决的? 在栈上分配对象,要一个特点,那就是离开作用域后,对象肯定要调用析构方法。利用这个特点,可以使用对象对指针封装,在对象的析构方法中进行delete,就保证了一定会执行delete。这就是智能指针。因为智能指针,不是针对一个特定类型的指针,因此把智能指针设计为类的模版,根据模版实参特例化一个模板类。

  同样道理,也可以使用相同技术,对互斥体封装。这就是 lock类模版。在lock的构造方法调用互斥体的lock方法,在lock的析构方法调用互斥体的unlock方法。 

4、mutex是对象类,lock是模板类。 

5、常用的互斥体有: 

  boost::mutex 

  boost::timed_mutex 

  boost::shared_mutex 

  boost::recursive_mutex 

6、lock的类模版有: 

  boost::unique_lock<T> 

  boost::shared_lock<T> 

  对类模版特例化,可以生成不同的lock类。

原文地址:https://www.cnblogs.com/nzbbody/p/3388455.html