- 博客(88)
- 资源 (2)
- 收藏
- 关注
原创 Redis基础数据结构
最近在整理Redis相关的基础数据结构,感谢http://zhangtielei.com/posts/blog-redis-dict.html博客上的分享,基于博主整理了一下思维导图,方便需要的同学参考~
2018-08-26 17:53:26 696
原创 Hiredis源码阅读(二)
Hiredis源码解析上一篇介绍了Hiredis中的同步api以及回复解析api,这里紧接着介绍异步api。异步api需要与事件库(libevent、libev、ae一起工作)。1、异步上下文在同步api中,介绍了一个上下文结构redisContext,异步api也有一个类似的上下文结构redisAsyncContext,用于维护异步连接中的各种状态。源码如下所示:typedef struct r...
2018-06-06 11:17:51 877
原创 Hiredis源码阅读(一)
Hiredis源码解析Hiredis库主要包含三类API:同步api、异步api以及回复解析api。首先介绍一下同步api以及回复解析api。1、同步api1.1、建立tcp连接函数原型:redisContext *redisConnect(const char *ip, int port);redisConnect函数用来创建一个上下文结构redisContext,并向reids服务器发起连接请...
2018-06-05 14:00:19 1379
原创 JNI基础知识学习汇总
JNI介绍JNI(Java Native Interface),也就是java本地接口,主要是用来支持和本地代码之间的互动-在Java程序中调用native code或者在native code中潜入Java虚拟机调用Java代码。
2017-01-08 11:04:42 733
原创 C++调用Python
1、Python嵌入程序介绍为什么要使用Python嵌入程序Python作为一门流行通用的脚本语言,可以很好的和C/C++程序结合在一起。
2016-12-17 19:33:27 1286
原创 GDB多线程多进程调试
gdb多线程调试gdb提供的多线程调试工具新线程创建自动提醒thread thread-id实现不同线程之间的切换info threads查询存在的线程thread apply [thread-id-list] [all] args在一系列线程上执行命令线程中设置指定的断点set print thread-events控制打印线程启动或结束是的信息set scheduler-locki
2016-11-20 23:44:32 1251
原创 Zookeeper C API学习总结
Zookeeper C API客户端使用C语言开发,zookeeper提供了两个库,zookeeper_st(单线程库)以及zookeeper_mt(多线程库)。zookeeper_st提供了异步API和集成在应用程序用来实现事件循环的回调函数,该库是为了支持pthread库不支持或是不稳定的系统而存在。使用过程中需要通过zoo_interest以及zoo_process实现事件处理以及通知机制。
2016-11-20 23:40:26 7529 2
原创 Ad-hoc类型同步识别
尽管之前的我们提出的动态数据竞争验证和检测方法能够比较精确地找到数据竞争,但是该方法还是会存在一部分误检,误检主要就是由于ad-hoc类型的同步引起的
2016-06-25 19:13:39 1046
原创 并行化的动态数据竞争验证和检测方法
上一篇文章提到的动态数据竞争验证和检测方法是结合了验证和检测两部分。这篇文章主要介绍一下并行化的动态数据竞争验证和检测方法。
2016-06-25 19:09:32 1152
原创 构建动态数据竞争检测平台
之前的文章分别介绍了基于Lockset算法、基于happens-before关系以及基于两者混合的方法。对于这些方法,已有的一些论文中提到的有关实验对比可能都比较片面或是不太客观,因此实现这些方法做一个比较全面的实验对比分析是很有必要的,不仅可以对这些已有的方法有一个更深入的理解,同时也能够发现他们存在的一些共性问题,方便后续的研究。
2016-06-25 19:03:11 841
原创 动态数据竞争验证和检测方法
之前提到的动态数据竞争验证方法尽管相比RaceFuzzer提高了验证的效率,但是仍然存在一个比较致命的问题就是执行程序一次只能够验证很少的一部分数据竞争。
2016-06-25 18:57:19 856 2
原创 动态数据竞争验证方法(二)
之前提到的动态数据竞争检测方法RaceFuzzer尽管能够在程序执行过程中增大数据竞争条件产生的可能性,但是该方法执行的效率不高。这篇文章主要介绍我们改进之后的动态数据竞争验证方法
2016-06-25 18:52:52 621
原创 动态数据竞争验证方法(一)
之前的文章分析动态数据竞争检测相关的方法。这篇文章主要介绍一下动态数据竞争验证方法。 动态数据竞争检测算法可以在不知道程序中是否存在数据竞争前提下执行,而动态数据竞争验证方法则是在知道程序中可能存在的数据竞争前提下,对这部分可疑的数据竞争进行验证,看这些数据竞争是否真的发生,同时也可以验证这些数据竞争是否对程序造成有害的影响。
2016-06-25 18:50:10 836
原创 静态数据竞争检测工具之RELAY-安装和使用
RELAY同样也是基于中间语言编写的静态数据竞争检测工具 安装RELAY之前确保Ocaml安装完毕,可参考之前的文章 http://blog.csdn.net/yangzhen92/article/details/46980511
2016-06-25 18:45:22 1322 5
原创 动态数据竞争检测方法实验分析(二)
上一篇文章主要分析了各个检测方法在检测能力上的优劣。这篇文章主要分析一下各个检测方法对程序造成的影响以及可扩展性。我们挑选了比较常用的SPLASH-2测试集程序用来测试这些动态数据竞争检测方法在程序运行过程中需要消耗的执行时间以及内存。
2016-06-03 15:30:49 867
原创 动态数据竞争检测方法实验分析(一)
之前的文章大致介绍了一下我们的动态数据竞争检测平台如何构建,这篇文章主要是在动态数据竞争检测平台上实现了之前介绍的数据竞争检测方法,我们扩展了其中的一些方法使得这些方法能够识别所有的Pthread库中的同步原语。
2016-06-03 13:34:52 2524 4
原创 基于Lockset和Happens-before的数据竞争方法汇总
之前的文章介绍都是单独使用lockset或是单独使用happens-before关系进行动态数据竞争检测的方法。单纯使用lockset算法,由于不考虑其他的一些同步原语,会导致很多的误报,但是该方法对线程交错不太敏感。单纯使用happens-before关系,该方法对线程交错比较敏感,因此会导致出现很多漏报。因此结合lockset算法和happens-before关系的混合(hybrid)算法由此而生。
2016-06-02 16:58:32 2155
原创 基于Happens-before的数据竞争方法汇总 (二)
上一篇文章我们谈到了Happens-before方法中最基础的方法Djit+,Djit+使用向量时钟VC进行数据竞争分析。下面这篇文章介绍的是FastTrack算法,在Djit+基础上进行的改进,将Djit+的时间复杂度从O(n)降到接近于O(1)。首次看的同学还是建议先看我之前写的有关介绍Djit+的相关基础内容。
2016-01-26 12:44:11 1503
原创 基于Happens-before的数据竞争方法汇总 (三)
在上一篇文章中提到了基于happens-before关系的FastTrack动态数据竞争检测方法,这篇文章中介绍的Loft方法是在FastTrack方法上进行了进一步地改进。
2016-01-26 09:57:20 1187
转载 Volatile的陷阱
对于volatile关键字,大部分的C语言教材都是一笔带过,并没有做太过深入的分析,所以这里简单整理了一些关于volatile的使用注意事项。实际上从语法上来看volatile和const是一样的,但是如果const用错,几乎不会有什么问题;而volatile用错,后果可能很严重。所以在volatile的使用上,建议大家还是尽量求稳,少用一些没有切实把握的技巧。注意volatile修饰
2015-06-29 20:50:10 3152 1
原创 Redis源码阅读之ae.c
1、需要处理的事件类型和结构这里包括文件处理事件、时间处理事件、事件终结处理事件、挂起之前处理事件 文件事件结构时间事件结构触发的事件结构事件驱动程序的状态 2、原型函数创建文件事件这里aeApi*这些函数都是具体多路复用模块提供的删除文件事件获取事件当前时间这里精确到秒和毫秒创建时间事
2015-05-09 13:17:11 774
原创 Redis源码阅读之aof.c
1、AOF缓冲区实现添加缓冲区块如果之前缓冲区链表中的最后一个block没有用完,那么先使用完,如果不够,在创建新的block添加到链表尾,为后续的写做准备输出缓冲迭代缓冲区链表,写到文件2、AOF重写 冲洗AOF文件:void flushAppendOnlyFile(int force)设置aof同步为AOF_FSYNC_EVENTSEC服务器
2015-05-08 21:36:06 1134
原创 Redis源码阅读之rdb.c
RDB文件结构 1、如何保存长度rdbSaveLen函数说明了RDB文件中如何保存长度如果开头两位是00,那么就表示后面的6位保存的是长度,长度最大值63如果开头两位是01,那么就表示后面的14位保存的是长度,长度最大就是2^14-1如果开头两位是10,那么后面6位空着,接下来的32位表示长度,最大值2^32-1>8)&。xFF)l(REDIS_RDB_14BITLEN
2015-05-04 22:07:15 1042
原创 Intel Pin-JIT模式和Probe模式下库函数的替换
这篇文章主要介绍一下Intel Pin在JIT模式和Probe模式下对库换数的替换,以及实现中有哪写需要注意的地方。JIT模式就是对插桩的代码进行即时编译,然后缓存起来使用Probe模式就是在要插桩的函数入口前面插入一条跳转指令,跳转到新的替换函数处执行,不在原来执行代码上进行修改具体的大家可以参考Pin官方手册https://software.intel.com/sites/la
2015-04-21 00:13:14 2094
原创 基于Lockset的数据竞争检测方法汇总(四)
今天讲的这篇文论中提到的Lockset方法同样也是和Happens-Before结合来进行动态数据竞争检测,这篇论文中使用的Happens-Before方法不是上一篇文章中提出的Djit+方法,而是使用Threadset方法,同时这篇论文提出的自适应检测方法能够在Threadset和Lockset自由切换,并且在检测共享对象的粒度上也是自适应的(这里的话不会提如何自适应的,将会在以后的文章中提到)
2015-04-18 16:11:53 820
原创 基于Lockset的数据竞争检测方法汇总(三)
上一篇文章中我们看到了有关共享对象状态变迁在Eraser基础上进行的改进,但是改进的不是特别明显,下面这篇论文不是单纯的用Lockset作为数据竞争检测方法,而是采用的Djit+以及改进的Lockset方法结合来进行动态数据竞争检测。 Djit+方法在这篇文章中已经说得比较明白了,想了解的同学可以看这里。 改进的Lockset方法用到了Djit+中的一些概念(后
2015-04-17 21:38:57 1026
原创 基于Lockset的数据竞争检测方法汇总(二)
前一篇文章提到的是使用Lockset最经典的方法,但是存在很多误报,针对这些误报产生的原因,有很多分析并改进了原始的Lockset方法,今天主要和大家谈的就是有关Lockset中状态ownership transition的一种改进。Referencevon Praun C, Gross T R. Object race detection[C]//ACM SIGPLAN No
2015-04-17 10:10:32 1161 1
原创 基于Lockset的数据竞争检测方法汇总(一)
对于搞数据竞争检测方向的人来说,Lockset方法大家肯定不陌生,作为一个刚入门数据竞争检测方向的我来说,就和大家总结一下我近期有关Lockset方法的一些研究和心得。 Lockset方法研究比较早可以追溯到1997年Eraser那篇论文,被引用无数次,非常经典的方法。 Reference Savage S, Burrows M, Nelson G, et
2015-04-17 00:37:33 3056
原创 MultiRace-Efficient on-the-fly data race detection
最近在研究数据竞争检测方法,,之前的工作是参考了Eraser这个工具1997年提出的基于Lockset方法的动态数据检测,在Interl的Pin框架的基础上对方法进行了复现(论文中有关动态注解没有完成,这部分以后再整合)。在后续的论文研读中发现大多数的方法都是基于Happens-Before和Lockset方法结合的思路,于是就看了下面这篇非常具有代表性的两种方法综合的论文。R
2015-04-16 13:27:15 1265
转载 C++模板初探
模板定义以关键字template开始,后接模板形参表(template parameter list),模板形参表是用尖括号括住的一个或者多个模板形参的列表,形参之间以逗号分隔。模板形参可以是表示类型的类型形参(type parameter),也可以是表示常量表达式的非类型形参(non-type parameter)。非类型形参跟在类型说明符之后声明。类型形参跟在关键字class或typena
2015-03-24 17:42:43 471
转载 常见排序算法的稳定性分析
排序算法的稳定性,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位
2015-03-13 21:56:18 533
转载 C/C++中内存对齐初探讨
原来对内存对齐一直没弄清楚,现在找到两篇网友的文章备忘:http://blog.csdn.net/arethe/article/details/2548867http://blog.sina.com.cn/s/blog_59b189220100a49h.html一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任
2015-01-22 10:31:07 499
原创 LeetCode之Implement strStr()
本题是LeetCode28题,属于Easily级别给出题目描述Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Update (2014-11-02):The sig
2015-01-16 09:56:17 499
原创 凸包问题之GrahamScan解法
继上一篇凸包问题的蛮力解法,本篇将介绍凸包问题的GrahamScan解法。首先了解一下GrahamScan解法的原理:当沿着Convex hull逆时针漫游时,总是向左转在极坐标系下按照极角大小排列,然后逆时针方向漫游点集,去除非Convex hull顶点(非左 转点)。第一步
2014-12-07 23:04:25 761
原创 凸包问题之蛮力解法
凸包问题首先解释什么叫做凸包问题:1 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。下图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。2 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧
2014-12-07 22:35:31 1835
转载 Linux下相关解压缩命令总结
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg
2014-11-15 16:43:23 447
转载 C语言sizeof空洞之字节对齐(#pragma pack使用)
C编译器的缺省字节对齐方式(自然对界)在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。 C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该
2014-10-26 10:49:30 756
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人