github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash

本文主要是介绍github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


        相关专题:共享内存、数据结构与算法_初级代码游戏的博客-CSDN博客

        相关文章:20、基于共享内存的散列存储hash-CSDN博客

        基础操作:github源码指引:共享内存、数据结构与算法-CSDN博客 

目录

一、运行示例

二、示例代码


一、运行示例

        在shmfc目录运行run.sh,显示命令表:

----------------------------------------
命令表:(q=exit)
0 管理
1 test_BinaryPool
3 test_CMultiProcessServer
4 test_CMultiProcessServer_view
5 test_CMultiProcessServer_speed
6 test_CMultiProcessServer_direct
7 test_RebuildSet
12 UDP测试客户端
13 UDP测试服务端
14 CStressTesting
15 CTestCSimpleMultiProcess_mutex atomic
16 CTest_hash
17 T_SHM_HASH
88 test_CMyRWMutex
89 test_T_SHM_SET_GROUP
90 test_shm_IActiveObject
91 test_ShmMultiMap
99 test_ParseFromXml
........................................
----------------------------------------
请选择命令:(q=exit default=17):

         输入17执行基于共享内存的hash的测试:

[08-26 08:39:22][应用][2516][信息] 用户输入的是:17
[08-26 08:39:22][2516-15][信息][shmArray.h              : 960(AttachToShm)][  0.59]test 连接共享内存成功 PI_N 1 PART 0 shmid = 622602 p 0x7f2cd2cf9000
[08-26 08:39:22][2516-16][信息][shmArray.h              : 960(AttachToShm)][  0.59]test_D 连接共享内存成功 PI_N 2 PART 0 shmid = 655371 p 0x7f2cd2cf4000
[08-26 08:39:22][应用][2516][信息][shmIActiveObject.h      :1059(RunCmdUI)][  0.59]
当前对象:test 子项[test test_D ]b:返回上一层 child:选择子项操作 默认显示子项列表和最后操作状态
1:创建 2:连接(只读) 3:连接(可写) 4:断开 5:禁用互斥 6:清除数据 7:创建私有 8:删除共享内存 9:显示 10:数据
11:从数据库加载 12:保存到数据库
21:从目录加载 22:保存到目录 23:导出为文本文件
31:从目录加载到私有内存 32:销毁私有内存
97:repair 98:check 99:ToDo 100:shell(q=exit ):

        输入b继续运行程序:

[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65426 65526
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65527 65427
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65427 65527
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65528 65428
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65428 65528
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65529 65429
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65429 65529
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65530 65430
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65430 65530
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65531 65431
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65431 65531
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65532 65432
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65432 65532
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65533 65433
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65433 65533
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65534 65434
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65434 65534
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65535 65435
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65435 65535
[08-26 08:39:54][应用][2516][信息][shmIActiveObject.h      :1059(RunCmdUI)][  0.88]
当前对象:test 子项[test test_D ]b:返回上一层 child:选择子项操作 默认显示子项列表和最后操作状态
1:创建 2:连接(只读) 3:连接(可写) 4:断开 5:禁用互斥 6:清除数据 7:创建私有 8:删除共享内存 9:显示 10:数据
11:从数据库加载 12:保存到数据库
21:从目录加载 22:保存到目录 23:导出为文本文件
31:从目录加载到私有内存 32:销毁私有内存
97:repair 98:check 99:ToDo 100:shell(q=exit ):

        插入了很多数据,可以输入9查看一下:

[08-26 08:41:39][应用][2516][信息] 用户输入的是:9
[08-26 08:41:39][应用][2516][信息][shmArray.h              :1401(Report)][  1.18]
test 开始报告T_ARRAY......
pHead=0x7f2cd2cf9000 pData=0x7f2cd2cf9ad8 isPrivate=0 shmid=622602 sizeof(T)=8
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8    byteorder= 10 =   2776  1 =     24  2 =      8  3 =      0  4 =    998  5 =    9996 =   1000
name=test part=0 capacity=65536,size=65536(100.00%) bytes=527064
地址映射表: GET_PP_SET=(nil)
分块数 7
0 : shm_id=622602 handle[0,1024) 容量=1024 连接信息: shm_id=622602 addr=0x7f2cd2cf9ad8
1 : shm_id=753678 handle[1024,2048) 容量=1024 连接信息: shm_id=753678 addr=0x7f2cd2cf2000
2 : shm_id=819216 handle[2048,4096) 容量=2048 连接信息: shm_id=819216 addr=0x7f2cd2cee000
3 : shm_id=884754 handle[4096,8192) 容量=4096 连接信息: shm_id=884754 addr=0x7f2cd2ce6000
4 : shm_id=950292 handle[8192,16384) 容量=8192 连接信息: shm_id=950292 addr=0x7f2cd2cd6000
5 : shm_id=1015830 handle[16384,32768) 容量=16384 连接信息: shm_id=1015830 addr=0x7f2cd2cb6000
6 : shm_id=1081368 handle[32768,65536) 容量=32768 连接信息: shm_id=1081368 addr=0x7f2cd2c76000
--------------------------------------------
bucket_count 65536(32768 of 32768)
[08-26 08:41:39][应用][2516][信息][shmMultiList.h          : 282(Report)][  1.18]test_D 开始报告T_ARRAY......
pHead=0x7f2cd2cf4000 pData=0x7f2cd2cf4ad8 isPrivate=0 shmid=655371 sizeof(T)=16
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8    byteorder= 10 =   2776  1 =     24  2 =     16  3 =      0  4 =    998  5 =    9996 =   1000
name=test_D part=0 capacity=131072,size=100000(76.29%) bytes=2099928
地址映射表: GET_PP_SET=(nil)
分块数 8
0 : shm_id=655371 handle[0,1024) 容量=1024 连接信息: shm_id=655371 addr=0x7f2cd2cf4ad8
1 : shm_id=688140 handle[1024,2048) 容量=1024 连接信息: shm_id=688140 addr=0x7f2cd2c72000
2 : shm_id=720909 handle[2048,4096) 容量=2048 连接信息: shm_id=720909 addr=0x7f2cd2c6a000
3 : shm_id=786447 handle[4096,8192) 容量=4096 连接信息: shm_id=786447 addr=0x7f2cd2c5a000
4 : shm_id=851985 handle[8192,16384) 容量=8192 连接信息: shm_id=851985 addr=0x7f2cd2c3a000
5 : shm_id=917523 handle[16384,32768) 容量=16384 连接信息: shm_id=917523 addr=0x7f2cd068e000
6 : shm_id=983061 handle[32768,65536) 容量=32768 连接信息: shm_id=983061 addr=0x7f2cd060e000
7 : shm_id=1048599 handle[65536,131072) 容量=65536 连接信息: shm_id=1048599 addr=0x7f2cd050e000
--------------------------------------------
free_size=0 free_head=-1 0h  NEXT |      N
----- ----- - ------0    -1 |    1001    -1 |    1012    -1 |    1023    -1 |    1034    -1 |    1045    -1 |    1056    -1 |    1067    -1 |    1078    -1 |    1089    -1 |    109...
99990 34454 | 100090
99991 34455 | 100091
99992 34456 | 100092
99993 34457 | 100093
99994 34458 | 100094
99995 34459 | 100095
99996 34460 | 100096
99997 34461 | 100097
99998 34462 | 100098
99999 34463 | 100099
----- ----- - ------

        输入b继续运行程序:

[08-26 08:40:31][应用][2516][信息] 用户输入的是:b
[08-26 08:40:31][应用][2516][信息][shmfc_t.cpp             : 945(main)][  0.88]命令 17 返回 0

二、示例代码

        示例代码很简单:

		static int T_SHM_HASH_test(int argc, char** argv, char const* name, int version){G_IS_DEBUG = false;try{T_SHM_HASH<T_DATA, PI_HASH, PI_DATA> a(name, version);if (a.Attach(false) || (a.CreateShm() && a.Attach(false) && a.m_mutex.Reset())){a.RunCmdUI();a.clear();long count = 100000;CDemoData data;CDemoData* data_from_shm;for (int i = 0; i < count; ++i){DEBUG_LOG << i << endi;data.n = i + 100;if (!a.AddData(data, data_from_shm))return __LINE__;}for (int i = 0; i < count; ++i){data.n = i + 100;if (!a.GetData(data, data_from_shm))return __LINE__;}a.ReportData();a.Extend();a.ReportData();a.RunCmdUI();a.Detach();//a.DestoryShm();return 0;}else{return __LINE__;}}catch (char const* e){thelog << e << ende;abort();}}

        实际功能代码shmHash.h。


(这里是文档结束)

这篇关于github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108224

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性