Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >非线程安全对象�

非线程安全对象�

作者头像
全栈程序员站长
发布于 2022-07-12 08:47:09
发布于 2022-07-12 08:47:09
25400
代码可运行
举报
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
	}
};

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ZOJ 3794 Greedy Driver spfa
以下Q行 u v 表示在u点有销售站,能够卖掉邮箱里的随意数量的油,每以单位v元。
全栈程序员站长
2022/07/12
1770
UVA 11090 – Going in Cycle!!(Bellman-Ford)[通俗易懂]
思路:二分+判负环。每次二分一个值mid。推断是否存在小于mid的环,那么就是(w1 + w2 + w3…) / n < mid == w1 – mid + w2 – mid + w3 – mid …. < 0,所以每次二分的时候。把边权值减掉mid。之后bellmanford判负环就可以
全栈程序员站长
2022/07/07
1790
数据结构之队列建议收藏
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120155.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/14
1960
leetcode先刷_Binary Tree Level Order Traversal II
非常easy标题,在后面,我不认为它不是那么简单的回答更多的。我们将编写,没有人啊。
全栈程序员站长
2022/07/06
1400
C语言 list 链表
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157968.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
1.4K0
POJ 3411 Paid Roads
一个城市能够走多次,so ~ > 须要用状态压缩。開始用了优先队列可是后来发现不能够用。当中例子用优先队列就过不了,于是把标记数组改为记录达到某个城市达到某种 状态的最小花费,假设搜到某个状态花费比当前状态小。更新标记数组的花费。就继续搜下去。否则不向下搜,这样搜出全部的情况就能够了。
全栈程序员站长
2022/07/06
1730
hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量
n女生选择不吵架,他甚至男孩边(他的朋友也算。并为您收集过程)。2二分图,一些副作用,有几个追求完美搭配(每场比赛没有重复的每一个点的比赛)
全栈程序员站长
2022/07/06
2110
分糖果
童年的我们将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了糖果,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给还有一个人须要1秒的时间,同一个小朋友不会反复接受糖果。因为糖果足够多,假设某时刻某小朋友接受了糖果。他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,并且自己会吃一些糖果。因为嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每一个小朋友从接受糖果到吃完糖果须要m秒的时间。那么,假设第一秒C小朋友開始发糖,第几秒全部小朋友都吃完了糖呢?
全栈程序员站长
2022/07/06
4420
hdu 4885 TIANKENG’s travel(bfs)
题目大意:给定N,L,表示有N个加油站,每次加满油能够移动距离L,必须走直线,可是能够为斜线。然后给出sx,sy,ex,ey,以及N个加油站的位置,问说最少经过几个加油站,路过不加油也算。
全栈程序员站长
2022/07/13
1870
对象池的使用场景以及自动回收技术
在编程中,我们经常会涉及到对象的操作,而经常的操作模式如下图所示:创建对象->使用对象->销毁对象。
河边一枝柳
2021/09/24
1.1K0
zg584_O-Z39663
Time Limit: 1 Sec Memory Limit: 128 MB
全栈程序员站长
2022/09/22
2290
HDU 1245 Saving James Bond
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117989.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/14
3270
HDU 3468 Treasure Hunting(BFS+网络流之最大流)
首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离。然后对于随意一对起始点来说,仅仅要这个点到起点的最短距离+该点到终点的最短距离==起点到终点的最短距离,就说明这点在某条从起点到终点的最短路上。
全栈程序员站长
2022/07/12
2690
poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)
意甲冠军:给定一个有向图有m单向边缘。免费推断是否两点起来(a可以b要么b可以a或最多彼此),该请求
全栈程序员站长
2022/07/05
1730
UVA – 12130 Summits
You recently started working for the largest map drawing company in theNetherlands. Part of your job is to determine what the summits in aparticular landscape are. Unfortunately, it is not so easy to determinewhich points are summits and which are not, because we do not want tocall a small hump a summit. For example look at the landscape given bythe sample input.
全栈程序员站长
2022/07/05
1640
AC自己主动机 总结
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117740.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
3200
喊山第二部_demjanov重排
喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)
全栈程序员站长
2022/09/22
2730
acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
给n个点。及m根pipe,每根pipe用来流躺液体的。单向的。每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体。里面流躺物质。
全栈程序员站长
2022/07/06
5200
acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
容器适配器之stack,queue和优先级队列---基于List实现的链栈,链队列,优先级队列
注意:当我们在类外部实现insert函数的时候,typename用来声明iterator是一个类型,这里iterator是定义在List类模板中的一个类
大忽悠爱学习
2021/11/15
5110
HDU-1387-Team Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1259 Accepted Submission(s): 430
全栈程序员站长
2022/07/06
3420
相关推荐
ZOJ 3794 Greedy Driver spfa
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验