《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。
目 录
第1部分C++ 多线程系统编程
第1章线程安全的对象生命期管理3
1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3
1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4
1.1.2MutexLock 与MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4
1.1.3一个线程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4
1.2对象的创建很简单. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5
1.3销毁太难. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7
1.3.1mutex 不是办法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7
1.3.2作为数据成员的mutex 不能保护析构.. . . . . . . . . . . . . . 8
1.4线程安全的Observer 有多难.. . . . . . . . . . . . . . . . . . . . . . . . 8
1.5原始指针有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11
1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13
1.7插曲:系统地避免各种指针错误. . . . . . . . . . . . . . . . .. . . . . . 14
1.8应用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17
1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19
1.11对象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21
1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23
1.11.2弱回调. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24
1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26
1.13心得与小结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26
1.14Observer 之谬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
第2章线程同步精要
2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.1.1只使用非递归的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33
2.1.2死锁. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35
2.2条件变量(condition variable). . . . . . . . . .
1