- 博客(16)
- 资源 (4)
- 收藏
- 关注
原创 G3D游戏引擎——编译
在支付宝半年了,都是在写Java的核心业务处理,感觉离技术越来越远,所以重新捡起C++,开始游戏引擎的研究,这次选择的游戏引擎是G3D,环境是Mac。这里的编译我选择的是g++,写一个小的实例,可以选择自带的sample的程序,编译的时候花费了我5个多小时才完成,需要下载jpeg,png等许多依赖的库。这里将整个编译的的命令行贴出来,给无法编译G3D的童鞋一点参考,其中的一些依赖文
2014-12-14 22:28:27
1667
原创 自己动手写带有事务支持的分布式Key-Value存储系统——锁管理器
对于锁事务的实现,里面需要使用大量的读写锁,大量线程同步地对数据加锁,难免会产生死锁,所以锁管理器不仅需要管理所有分配的锁,还要能够自动检测出死锁,并且主动解除死锁状态。死锁检测的原理:死锁检测方法中通常使用等待图 WFG(Wait-For Graph)作为表达事务间等待关系的数学模型。在 WFG 中,结点 ti表示事务,边(ti,tj)表示事务 ti等待 tj,该边在 ti申请对
2014-03-27 08:59:09
1103
原创 自己动手写带有事务支持的分布式Key-Value存储系统——读写锁
为了实现高并发的锁机制事务,需要使用读写锁进行并发控制。Java类库本身提供了读写锁,但是其灵活性对于这个系统的需求是不够的。本系统的读写锁需要实现在单个线程内部能够任意的加写锁,加读锁,并且不会阻塞,锁的释放可以单次单次进行,也可以一次完成(多次加锁,一次释放);但是多个线程之间仍然符合读写锁的互斥性。 为了实现这样的需求,我的设计如下 |--------------|
2014-03-17 22:57:14
1577
原创 自己动手写带有事务支持的分布式Key-Value存储系统
为了记录自己开发这个系统的全过程以及养成写技术博客的习惯,我决定开始在CSDN上持续更性此专题。代码库地址 https://github.com/FoOTOo/DoDo
2014-03-08 12:12:20
1338
原创 JDK源代码分析——Thread
说实话,这部分东西太多了,而且涉及到JNI和JVM的东西,先只分析一小部分,以后再补上//runnable是只有一个run函数的接口publicclass Thread implements Runnable { /* Make sure registerNatives is the first thing does. */ //jni private static
2013-10-06 20:56:27
1077
原创 java类库原码分析---Integer
其实这些东西比较简单,只是需要讲一下小整数的缓冲池(python的底层也是有的,这是相互抄袭的结果??),先看看代码private static class IntegerCache { static final int high; static final Integer cache[]; //静态块中完成整数缓冲池的初始化
2013-10-06 16:01:44
810
原创 Mysql源代码分析---网络初始化
//这些比较简单,看看注释就能明白了/*初始化网络,主要是初始化网络监听的套接字ip_socket和用于本地监听的unix_sock*/static void network_init(void){ struct sockaddr_in IPaddr;#ifdef HAVE_SYS_UN_H struct sockaddr_un UNIXaddr;#endif
2013-09-21 17:08:05
1047
原创 深入理解C++引用
首先什么是引用?我将使用程序来回答你:首先来个最简单的代码:int i = 10;int &ri = i;int *p = &i;看看生成的代码://对i变量的说明.globl i .data .align 4 .type i, @object .size i, 4//分配int i的内存并初始化i: .long 10//对ri的说明,注意引用是放在rodata中
2013-05-27 16:20:45
971
2
原创 linux内核kobject事件处理详解
/*所有事件的名称列表*/static const char *kobject_actions[] = { [KOBJ_ADD] = "add", [KOBJ_REMOVE] = "remove", [KOBJ_CHANGE] = "change", [KOBJ_MOVE] = "move", [KOBJ_ONLINE] = "online", [KOBJ_OFFLINE]
2013-04-22 14:34:26
1231
原创 Linux驱动模型——kobject剖析
/*struct kobj_type的声明*/struct kobj_type{ /*用于释放kobject*/ void (*release)(struct kobject *kobj); /*sys的操作表*/ const struct sysfs_ops *sys_ops; /*内核对象的属性,对应于sys文件系统的文件*/ struct attribute **defaul
2013-04-20 20:29:37
889
原创 minx文件系统源代码分析——超级块操作表
Minix 文件系统的超级快操作表如下:static const struct super_operations minix_sops = { .alloc_inode = minix_alloc_inode,//分配inode .destroy_inode = minix_destroy_inode,//销毁inode .write_inode = minix_write_inode,
2013-04-06 13:41:33
1833
原创 用C实现一个简单的泛型
谁说只有C++才可以实现泛型,C照样也是可以的,废话少说,上代码/** * c实现泛型排序 * 示例是用泛型实现数字,字符串的排序 **/#include /**/#define SORT_INIT(T, name)\void sort_##name(T *array, int num, int (*SortFunc)(T a, T b))\{\ int i = 1;\ in
2012-11-14 23:49:28
910
原创 哈尔滨工业大学操作系统第六次实验---姚逢靖
如何对输出字符进行过滤,我的第二种方案是采用将待输出的字符串输出过滤到一块映射到用户态的内存中,这种方法的好处是不管是什么样的文件都不需要修改它的“write”函数。修改进程控制快(sched.h),修改struct task_struct的最后两行,修改INIT_TASK :#ifndef _SCHED_H#define _SCHED_H#define NR_TASK
2012-11-04 16:37:31
2049
2
原创 python字符串的Intern
我们知道对于一般的单字符,比如‘a'对于i = 'a', b = 'a'id(i) = id(b)成立,因为单字符存在字符缓冲池中,对于字符串比如i = 'abcdef', b = 'abcdef'id(i) = id(b)也成立,因为这些字符串会被Intern,所以i和b实际上指向的是同一个内存地址但是这种情况呢?i = ‘id(i)=id(b)?,在python
2012-10-28 22:56:07
940
原创 我花了11天写的操作系统Yinux0.01版
本操作系统系个人原创,版权属于姚逢靖(哈尔滨工业大学计算机系10级本科生)和Footoo实验室。每个人都可自由下载,但哈工大的学生特别是10级本科生请不要当操作系统作业交,否则会被查重的~~ 本操作系统最终效果如图,三个进程不停的进行获得自己的pid的系统调用,进程1还调用设置系统时间的系统调用,设置系统的时间(时间不准,被我故意调快了,为了效果好一点) 如果需要用一个字来形
2012-08-01 16:52:17
3048
2
Yinux操作系统源代码
2012-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人