zoukankan      html  css  js  c++  java
  • 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类。

  • 相关阅读:
    Oracle误删除数据和表的恢复办法包括truncate
    SQL中简单函数介绍
    SQL中的null
    oracle数据库实例后台进程
    常用查询视图
    AIX 常用命令积累(未完待续)
    查询当前用户下的表/查询某一个用户的表
    查询统计运行和采控库里所有用户下的记录数大于5000万条的表
    使用orace数据库自带的sqldeveloper
    PL/SQL Developer
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3388455.html
Copyright © 2011-2022 走看看