Cppunit 源码 SynchronizedObject
运用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 © ); 72 73 /// Prevents the use of the copy operator. 74 void operator =( const SynchronizedObject © ); 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相关推荐
- 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码
java开发必知必会之看源码,而看源码的第一步则是找到源码
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL
[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 1. 首先下载源码包: ftp://ftp.jaist.ac.jp/pub/m ...
- java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- Go 源码里的这些 //go: 指令,go:linkname 你知道吗?
原文地址: Go 源码里的这些 //go: 指令,你知道吗? 一文解惑 //go:linkname 指令
- 超详细中文预训练模型ERNIE使用指南-源码
作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...
- 谷歌BERT预训练源码解析(二):模型构建
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...
- pytorch源码解析:Python层 pytorchmodule源码
尝试使用了pytorch,相比其他深度学习框架,pytorch显得简洁易懂.花时间读了部分源码,主要结合简单例子带着问题阅读,不涉及源码中C拓展库的实现. 一个简单例子 实现单层softmax二分类, ...
- Bert系列(二)——源码解读之模型主体
本篇文章主要是解读模型主体代码modeling.py.在阅读这篇文章之前希望读者们对bert的相关理论有一定的了解,尤其是transformer的结构原理,网上的资料很多,本文内容对原理部分就不做过多 ...
最新文章
- centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
- 第八天2017/04/17(3、C++的几个语法)
- Android 让系统自动生成缩略图并写入媒体库
- openlayers地图旋转_OpenLayers的使用---- 一个完全免费开源的地图JS库
- 第十节:进一步扩展两种安全校验方式
- day3-python学习笔记(三)字典、元组
- 运行第一个node.js文件
- strlen函数strcpy函数strcat函数的实现
- make clean、make mrproper、make distclean的区别【转】
- 媒体管理工具Media Encoder 2022 for Mac
- go语言应用知识:-1-输入项目信息,获取相应内容打印
- 微软推出python免费在线教程视频_重磅发布!微软推出 Python 短视频入门课,直冲 GitHub 热榜第一!...
- java如何快速入门Hadoop大数据技术?
- 微信支付——委托代扣扣款周期、额度设置说明
- VUE全局this指向
- android本地视频播放demo,基于Android的本地视频播放器
- 利用WinPcap模拟网络包伪造飞秋闪屏报文
- 思科PC远程控制交换机和路由器
- 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
- chromium笔记
热门文章
- 32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)
- matlab空格会消失了,如何在Matlab中自动删除保存的尾随空格?
- python 温度 符号_Python通过小实例入门学习---1.0(温度转换)
- VS 如何修改C++编译标准
- c#中 uint_C#中的uint关键字
- 简单三层架构(登录)
- java求水电费_java水电费管理系统
- XADD和NEG命令
- python需要联网运行吗_如何暂停在终端中运行的python脚本
- rust种的南瓜为什么老是消失_冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱...