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类。

  • 相关阅读:
    女孩提出分手的N种理由
    Attribute应用,简化ANF自定义控件初始化过程
    关于Web的动态页面与静态页面分开的想法.
    .Net面试题
    算法题,不用递归,构造树型
    花两个小时,做了个分页控件
    事件应用,为系统提供扩展功能
    绘制半透明的图片
    Tile Studio简介(转载)
    Thinking in Java 摘录笔记
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3388455.html
Copyright © 2011-2022 走看看