运用C++的构造,析构进行,加锁解锁。在函数进入的时候定义临时变量。任何一个分支推出的时候都会调用析构函数。避免多分支出现的问题。

 1 #ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
 2 #define CPPUNIT_SYNCHRONIZEDOBJECT_H
 3
 4 #include <cppunit/Portability.h>
 5
 6
 7 CPPUNIT_NS_BEGIN
 8
 9
10 /*! \brief Base class for synchronized object.
11  *
12  * Synchronized object are object which members are used concurrently by mutiple
13  * threads.
14  *
15  * This class define the class SynchronizationObject which must be subclassed
16  * to implement an actual lock.
17  *
18  * Each instance of this class holds a pointer on a lock object.
19  *
20  * See src/msvc6/MfcSynchronizedObject.h for an example.
21  */
22 class CPPUNIT_API SynchronizedObject
23 {
24 public:
25   /*! \brief Abstract synchronization object (mutex)
26    */
27   class SynchronizationObject
28   {
29     public:
30       SynchronizationObject() {}
31       virtual ~SynchronizationObject() {}
32
33       virtual void lock() {}
34       virtual void unlock() {}
35   };
36
37   /*! Constructs a SynchronizedObject object.
38    */
39   SynchronizedObject( SynchronizationObject *syncObject =0 );
40
41   /// Destructor.
42   virtual ~SynchronizedObject();
43
44 protected:
45   /*! \brief Locks a synchronization object in the current scope.
46    */
47   class ExclusiveZone
48   {
49     SynchronizationObject *m_syncObject;
50
51   public:
52     ExclusiveZone( SynchronizationObject *syncObject )
53         : m_syncObject( syncObject )
54     {
55       m_syncObject->lock();
56     }
57
58     ~ExclusiveZone()
59     {
60       m_syncObject->unlock ();
61     }
62   };
63
64   virtual void setSynchronizationObject( SynchronizationObject *syncObject );
65
66 protected:
67   SynchronizationObject *m_syncObject;
68
69 private:
70   /// Prevents the use of the copy constructor.
71   SynchronizedObject( const SynchronizedObject &copy );
72
73   /// Prevents the use of the copy operator.
74   void operator =( const SynchronizedObject &copy );
75 };
76
77
78 CPPUNIT_NS_END
79
80 #endif  // CPPUNIT_SYNCHRONIZEDOBJECT_H

 1 #include <cppunit/SynchronizedObject.h>
 2
 3
 4 CPPUNIT_NS_BEGIN
 5
 6
 7 SynchronizedObject::SynchronizedObject( SynchronizationObject *syncObject )
 8     : m_syncObject( syncObject == 0 ? new SynchronizationObject() :
 9                                       syncObject )
10 {
11 }
12
13
14 SynchronizedObject::~SynchronizedObject()
15 {
16   delete m_syncObject;
17 }
18
19
20 /** Accept a new synchronization object for protection of this instance
21  * TestResult assumes ownership of the object
22  */
23 void
24 SynchronizedObject::setSynchronizationObject( SynchronizationObject *syncObject )
25 {
26   delete m_syncObject;
27   m_syncObject = syncObject;
28 }
29
30
31 CPPUNIT_NS_END

转载于:https://www.cnblogs.com/xiaoxiong0222/p/4491542.html

Cppunit 源码 SynchronizedObject相关推荐

  1. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  2. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  3. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 1. 首先下载源码包: ftp://ftp.jaist.ac.jp/pub/m ...

  4. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  5. Go 源码里的这些 //go: 指令,go:linkname 你知道吗?

    原文地址: Go 源码里的这些 //go: 指令,你知道吗? 一文解惑 //go:linkname 指令

  6. 超详细中文预训练模型ERNIE使用指南-源码

    作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...

  7. 谷歌BERT预训练源码解析(二):模型构建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...

  8. pytorch源码解析:Python层 pytorchmodule源码

    尝试使用了pytorch,相比其他深度学习框架,pytorch显得简洁易懂.花时间读了部分源码,主要结合简单例子带着问题阅读,不涉及源码中C拓展库的实现. 一个简单例子 实现单层softmax二分类, ...

  9. Bert系列(二)——源码解读之模型主体

    本篇文章主要是解读模型主体代码modeling.py.在阅读这篇文章之前希望读者们对bert的相关理论有一定的了解,尤其是transformer的结构原理,网上的资料很多,本文内容对原理部分就不做过多 ...

最新文章

  1. centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
  2. 第八天2017/04/17(3、C++的几个语法)
  3. Android 让系统自动生成缩略图并写入媒体库
  4. openlayers地图旋转_OpenLayers的使用---- 一个完全免费开源的地图JS库
  5. 第十节:进一步扩展两种安全校验方式
  6. day3-python学习笔记(三)字典、元组
  7. 运行第一个node.js文件
  8. strlen函数strcpy函数strcat函数的实现
  9. make clean、make mrproper、make distclean的区别【转】
  10. 媒体管理工具Media Encoder 2022 for Mac
  11. go语言应用知识:-1-输入项目信息,获取相应内容打印
  12. 微软推出python免费在线教程视频_重磅发布!微软推出 Python 短视频入门课,直冲 GitHub 热榜第一!...
  13. java如何快速入门Hadoop大数据技术?
  14. 微信支付——委托代扣扣款周期、额度设置说明
  15. VUE全局this指向
  16. android本地视频播放demo,基于Android的本地视频播放器
  17. 利用WinPcap模拟网络包伪造飞秋闪屏报文
  18. 思科PC远程控制交换机和路由器
  19. 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
  20. chromium笔记

热门文章

  1. 32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)
  2. matlab空格会消失了,如何在Matlab中自动删除保存的尾随空格?
  3. python 温度 符号_Python通过小实例入门学习---1.0(温度转换)
  4. VS 如何修改C++编译标准
  5. c#中 uint_C#中的uint关键字
  6. 简单三层架构(登录)
  7. java求水电费_java水电费管理系统
  8. XADD和NEG命令
  9. python需要联网运行吗_如何暂停在终端中运行的python脚本
  10. rust种的南瓜为什么老是消失_冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱...