随笔分类 -  原创

锁管理器的实现
摘要:锁管理器LockManager用于解决这样的问题:我们需要一个锁对应一种资源,但是需要上锁的资源的种类可能非常的多,或者甚至是未知的。 这种情况下,我们不可能一次初始化所有的锁。如果不能对这些未知资源上锁的话,就不可能实现对这些资源的互斥访问了。举个例子,有一张无限的地图,玩家可以在在地图上按照坐标随意移动。需要对每个坐标锁对应的资源上锁。 解决办法如下:1. 首先对资源做唯一标识。我采用的是一个字符串来标识一个资源。 具体例子里就是坐标"x,y"2. 一个字符串对应一把锁,由lockManager来控制锁的创建。可以想见,主要是一个key=>lock的mapclas 阅读全文

posted @ 2011-12-22 21:49 freestyleking 阅读(611) 评论(0) 推荐(1)

如何实现令牌队列(token queue)
摘要:令牌环在计算机网络中有广泛的应用。在程序中有时也需要应用到令牌技术。 这里介绍一下令牌队列的实现。一个令牌队列是一系列需要执行的调用的集合,它的作用有两点:1. 保持调用的顺序2. 调用间互斥执行这两点都是通过令牌来实现的。规则是:只有获得令牌的调用才能执行,执行完毕后将令牌归还。令牌队列里最简单的情况是:只有一个令牌,任何时候只有一个调用处于执行状态。以下是典型的使用场景:1. 客户代码请求获得令牌以执行一个调用 2. 令牌队列接收该请求,将该请求放入待执行队列3. 当令牌不被其他调用占用时,令牌队列选取一个调用,赋予令牌并执行. 若令牌被占用,则退出4. 调用执行完毕,将令牌归还,回到步. 阅读全文

posted @ 2011-08-30 16:06 freestyleking 阅读(848) 评论(0) 推荐(0)

Linux async io 2
摘要:async io 之iohandler实现iohandler的功能:1. 封装对fd的读写2. delegate读写到io manager 线程首先需要初始化iohandler.用一个预先得到的fd作为参数打开对应文件,并设置nonblocking。int open(int fd) { m_fd = fd; fcntl(m_fd, F_SETFL, O_NONBLOCK);}iohandler对外的读写接口不外乎read()和write(). 我们定义接口如下:void async_read(Buffer *buf, int len, CB cb);void async_write(Buffe 阅读全文

posted @ 2011-06-11 18:28 freestyleking 阅读(604) 评论(0) 推荐(0)

Linux async io 1
摘要:asynchronous io的使用越来越普及。现在有相当多的类库,web服务器和网络编程框架使用了这一技术。比如python的tornado,twisted, c写的httperf, libevent, boost asyncIO。我所在的项目有一个c++开源库http://code.mozy.com/projects/mordor, 也用到了这一技术。顺便提一下,这是一个很强大的库,实现了很多很cool的特性(如fiber).这个系列的文章计划分为4部分:1,async io的基础,事件循环 2. 具体io回调处理的实现 3.如何用async io 实现一个socket stream 4. 阅读全文

posted @ 2011-06-05 21:36 freestyleking 阅读(1005) 评论(0) 推荐(0)

邪恶的向前申明(forward declaration) 还是邪恶的隐式类型转换
摘要:前几天遇到一个诡异的问题。base.h classBase1{public:virtualvoiddo_something();};classBase2{public:virtualvoiddo_something2();};classImpl:publicBase1,publicBase2{public:virtualvoiddo_something2();};void foo(Base1 &base1){ base1.do_something(); }在test.h中class Impl;void bar(Impl &impl); 在test.cc中void bar( &a 阅读全文

posted @ 2011-06-01 12:00 freestyleking 阅读(308) 评论(0) 推荐(0)

算法导论 chapter7 线性排序
摘要:counting sort: for A[1,...,n], given that for any i, 0<=i<=n, then c<=A[i]<=d. let m = d-c+1, create an array B[1, ..., m]. each item B[j] means how many items in A are less or equal to c+j-1:for i <- 1 to n B[A[i]]++for j <- 2 to m B[j] = B[j] + B[j-1] then it's easy to constr 阅读全文

posted @ 2011-06-01 11:35 freestyleking 阅读(621) 评论(0) 推荐(0)

c++ 中虚拟克隆(virtual clone)
摘要:又看了一遍more effective c++, 注意到以前没怎么记住的virtual clone技术。classBase{public:virtualBase*clone();};classImpl1{public:virtualImpl1*clone(){returnnewImpl1(*this);}};classImpl2{public:virtualImpl2*clone(){returnnewImpl2(*this;);}};初一看没什么特别的。clone只是调用了拷贝构造函数。确实,在没有类层次结构的情况下,一个这样的clone()并不会比直接写拷贝构造有用。奇特的是, 这里3个. 阅读全文

posted @ 2011-06-01 11:33 freestyleking 阅读(3643) 评论(0) 推荐(2)

TCP Traffic Analyzer
摘要:想知道服务器上有多少个超过1秒慢连接,想知道多少TCP连接失败吗?yahoo开源的这个工具对系统调优、性能监控很有帮助 http://sourceforge.net/projects/yconalyzer/研究一下用法 阅读全文

posted @ 2010-05-24 15:51 freestyleking 阅读(184) 评论(0) 推荐(0)

代码大全笔记
摘要:最近在看代码大全。感觉有些是空谈般的说教,不过大部分内容还是很有借鉴意义的。摘录一些觉得比较有用的内容,当作是学习笔记吧,还不完全,慢慢添加。 Normal 0 false false false MicrosoftInternetExplorer4 6抽象数据类型 6.1 ADT a. 把底层数据类型抽象为ADT,尽量避免在程序中大量出现底层数据类型的操作。 例如:currentFont.... 阅读全文

posted @ 2009-07-23 16:16 freestyleking 阅读(331) 评论(0) 推荐(0)

导航