这将是我关于Linux Epoll服务器开发系列文章中的第一篇,关于线程同步的操作,大部分是原创,少部分是借鉴。

命名风格近似于Google C++ Coding Style,但根据自己的习惯做了调整。

这些代码将用于构建一个高性能的Socket服务器,贴出来的目的是与大家交流,如果有幸能为朋友们所用,请一定要记得给我反馈,方便我改进,帮助我进步,谢谢!

我的邮件地址:miscab@gmail.com

由于跨平台的代码面目可憎,暂时我只维持一个Linux的版本。

 

要编译以下代码请加入一些基本类型定义:

 

Code

 

并加入以下的头文件定义:

 

Code

 

 

1. 参考了网上的代码,融入了Google的编码风格,为每个对象定义判定初始化是否成功的bool成员变量isInitialized。

同时抽象出Lock和Unlock接口,让各类mutex和semaphore去实现具体的Lock和Unlock操作。

Code

 

2. 读写锁的封装,Lock()等于LockRead()。

Code

 

3. 参考网上的Condition封装代码,增加了WaitTimeout接口,这样封装下来Condition的功能就与Windows平台的WaitForSingleObject非常类似了。

大家肯定都有感觉,WaitForSingleObject用起来那是相当顺手,呵呵

Code

 

4. 自旋锁的封装,有的时候自旋锁比Mutex更有效率

 

Code

 

5. 无命名信号量的封装

 

Code

 

6. 还有一些类似于Windows平台InterlockedIncrement之类的封装函数

 

Code

 

也差不多了,我写代码用的也就是这些,剩下的还有命名信号量用起来挺舒服的,就像Windows的NamedEvent,用于进程或线程的同步。

有时间把命名信号量封装出来。

posted on 2009-05-21 17:03  Napoleon  阅读(1117)  评论(0编辑  收藏  举报