代码改变世界

随笔档案-2015年07月

跨平台轻量级读写锁

2015-07-21 16:41 by 哦万里云, 461 阅读, 收藏,
摘要: 锁的数据结构足够简单:volatile long;将long的最高位存放写锁标志,低24位作为读锁计数;写锁的实现:1.加锁时,等待long位0时设置写锁标志,用原子操作实现。可以保证加锁前没有任何人获得读锁或写锁;2.解锁时,去掉写锁标志;读锁的实现:1.加锁时,首先增加读锁计数,于是释放前任何写... 阅读全文

Linux内核中大小端判定宏

2015-07-21 10:09 by 哦万里云, 1471 阅读, 收藏,
摘要: #include static union{ char c[4];unsigned long mylong;} endian_test = { {'l','?','?','b'} };#define ENDIANNESS ( (char) endian_test.mylong )int main(... 阅读全文

TCP_NODELAY

2015-07-11 15:43 by 哦万里云, 280 阅读, 收藏,
摘要: 启用TCP_NODELAY的情况下:客户端程序C连接到服务器程序S;C仅接受数据,S仅发送数据S循环调用send发送长度很小的数据包比如:10字节;在C上用任务管理器查看到C的上行流量大约是下行流量的1/3左右问题:C没有发送任何数据为啥有那么多的上行流量?分析:关闭TCP_NODELAY,每次调用... 阅读全文

SO_REUSEADDR

2015-07-11 15:20 by 哦万里云, 192 阅读, 收藏,
摘要: 问题:Linux的服务器程序,关闭后马上启动,经常报错,说是端口已经被占用,不过稍等一会儿就可以启动了。原来我们在调用closesocket把已绑定端口的socket关闭时,这个socket并没有立即消失,而进入了TIME_WAIT状态。解决方法:setsockopt(....,SO_REUSEAD... 阅读全文

windows下使用pthreads

2015-07-06 17:06 by 哦万里云, 680 阅读, 收藏,
摘要: pthread-win32在Windows上实现了线程相关的Posix标准,接口一模一样包含:threadmutexcondswlockspinsembarrierhttps://sourceware.org/pthreads-win32/ 阅读全文