基础
文章平均质量分 80
rainychen1022
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux进程详解
本文实际上是 "UNIX环境高级编程" 的读书笔记. 所以许多细节并没有表述出来, 想要刨根问底的同学建议再看看原书.之所以把读书笔记贴到博客上, 出于两个目的:1. 加深自己的学习效果. 2. 提供一个快速浏览的方式.本文提到的技术在下面的环境中实际验证过:Linux version 2.6.18-164.el5 x86_64 GNU/Linux(gcc原创 2016-04-21 11:19:43 · 1882 阅读 · 1 评论 -
管道和多线程
管道是内核维护的一个缓存, 它提供两个 fd, 从一个fd写入数据, 从另一个fd读出数据. 所以它是半双工的. 我在这里讨论一下如何在单进程多线程环境下使用管道.假设一个系统里有多个生产者和一个消费者, 每个生产者和消费者运行在单独的线程中. 我们通常会用一个加锁的消息队列来沟通生产者和消费者. 而管道可以取代这个消息队列, 并且减少代码的复杂度, 让系统逻辑更清晰.原创 2016-03-22 20:00:22 · 7897 阅读 · 0 评论 -
用原子操作实现无锁编程
假设我们要维护一个全局的线程安全的 int 类型变量 count, 下面这两行代码都是很危险的:count ++;count += n;我们知道, 高级语言中的一条语句, 并不是一个原子操作. 比如一个最简单的自增操作就分为三步: 1. 从缓存取到寄存器2. 在寄存器加13. 存入缓存。多个线程访问同一块内存时, 需要加锁来保证访问操作是互斥的. 所以, 我原创 2016-01-26 16:15:10 · 4963 阅读 · 0 评论 -
c++的陷阱
正确的初始化对象对于内置数据类型,系统不会去初始化, 因为这会增加运行成本.所以, 永远在使用内置类型前将它们手动初始化;对于内置类型以外的东西, 系统会自动调用构造函数来初始化。我们要确保每个构造函数都将对象的每一个成员做了初始化.初始化对象的成员时,必须分清初始化和赋值的区别,防止二次初始化。using std原创 2016-06-13 16:05:50 · 825 阅读 · 0 评论
分享