非线程安全对象�

非线程安全对象�

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

今天的微博有人讨论到对象池,我想到之前项目的实现,应该用模板来实现啊,唉,还是被前人的想法给框定了,只是实现一个特别简单,花了几分钟写了个:

const int DefaultPoolSize = 1024;
template <class T>
class CSSObejctPool{
private:
	queue<T*> m_OriBlock;
	queue<T*> m_ObjectBlock;
	const INT32 m_DefaultBlockSize; 
public:
	~CSSObejctPool(){
		while (!m_OriBlock.empty()){
			T* pBlock = m_OriBlock.front();
			delete []pBlock;
			m_OriBlock.pop();
		}
	}

	CSSObejctPool(INT32 blockSize = DefaultPoolSize):m_DefaultBlockSize(blockSize){
	}

	T* GetObject(){
		if (true == m_ObjectBlock.empty()){
			T* pNewObject = new T[m_DefaultBlockSize];
			m_OriBlock.push(pNewObject);
			for (int i = 0; i < m_DefaultBlockSize; ++i){
				m_ObjectBlock.push(pNewObject+i);
			}
		}

		T* pGetObject = m_ObjectBlock.front();
		m_ObjectBlock.pop();
		return pGetObject;
	}

	void ReleaseObejct(T* pObject){
		if (0 == pObject){
			return;
		}

		m_ObjectBlock.push(pObject);
	}

	void Clear(){
		while (!m_ObjectBlock.empty()){
			T* pObject = m_ObjectBlock.front();
			pObject->Clear();
			m_ObjectBlock.pop();
		}

		queue<T*> tempBlock;
		while (!m_OriBlock.empty()){
			T* pBlock = m_OriBlock.front();
			for (INT32 i = 0; i < m_DefaultBlockSize; ++i){
				m_ObjectBlock.push(pBlock + i);
			}
			
			tempBlock.push(pBlock);
			m_OriBlock.pop();
		}

		m_ObjectBlock = tempBlock;
	}
};

等下再实现个线程安全的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118737.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 9008刷机 小米max2_小米Max2解锁教程_小米Max2一键解锁BL的方法「建议收藏」

    9008刷机 小米max2_小米Max2解锁教程_小米Max2一键解锁BL的方法「建议收藏」下面是咱们的小米Max2手机的解锁教程,也就是解锁BL的教程,在论坛里看到有机友在找相关的解锁操作,所以在这里整理了一下详细的解锁操作步骤供大家参考了,这个解锁是解锁BL,不是手机屏幕解锁,大家不要搞混了,只有解锁了BL之后手机才可以进行相关的root操作或者是刷机操作,如果你还不知道怎么进行解锁的话,就和迷你手机网一起来看看详细的解锁操作过程吧:下面是小米Max2详细的解锁步骤:1:然后到这个网…

  • 软件测试必问必背面试题

    软件测试必问必背面试题软件测试必问必背面试题01软件测试理论部分1.1测试概念1.请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码集成测试:通过测试发现与模块接口有关的问题系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性验收测试:这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。验收测试包括Al

  • java months between,java 8-chronounit.months.between(fromdate,todate)不能按预期工作

    java months between,java 8-chronounit.months.between(fromdate,todate)不能按预期工作就日历而言,您的问题是可以理解的:这两个比较代表一个完整的月。但是java.time.temporal.ChronoUnit.between不是以这种方式推理,而是以成套设备.根据它的javadoc,结果是预期的:计算返回一个整数,表示两个时间单位之间的完整单位.例如,中的金额从11:30到13:29的时间只有一个小时一分钟差两个小时。这个LocalDate.untiljavadoc,由Chro…

  • 怎样快速在线将pdf文件转换成word

    怎样快速在线将pdf文件转换成word免费pdf转word在线转换器在办公环境下如何将PDF转换成Word,是不少上班族普遍需要了解的问题之一。面对上百份需要处理的文档,其实否不用安装专业的PDF转Word转换器,借助免费PDF转Word在线转换器就能轻松帮你搞定PDF转Word问题。pdf在线转换成wordhttp://app.xunjiepdf.com   pdf word在线转换器最新发布的迅捷免费pdf转word

  • mysql读写分离之springboot集成

    springboot、mysql实现读写分离1、首先在springcloudconfig中配置读写数据库mysql:datasource:readSize:1#读库个数type:com.alibaba.druid.pool.DruidDataSourcewrite:url:jdbc:mysql://200…

  • 基于小文件的分布式文件存储方案(JDistFS)

    基于小文件的分布式文件存储方案(JDistFS)1.前言这个项目是我2011年在杭州某家互联网公司实习的写的项目,当时坐下来感觉还不错,能够支持上百台服务器的集群需求,并且也支持简单的负载均衡策略,接下来,我来简单地介绍下JDistFS的实现目标,架构以及提供给上层用户使用的接口说明2.JDistFS目标  1)支持C++/JAVA语言的API借口  2)支持Linux/Windows系统  3)支持集群,支持

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号