线程原语的选用
不直接使用Pthreads,而是使用更为易用的wrapper,封装下面的调用
- 线程的创建和等待结束
- mutex的创建、销毁、加锁、解锁
- 条件变量的创建、销毁、等待、通知、广播
在这些wrapper之上进一步构建线程同步组件
- ThreadPool
- CountDownLatch
- BlockingQueue (有界/无界)
- ...
多线程编程需要注意的地方
C++标准库容器和std::string都不是线程安全的
iostream不是线程安全的
线程的标识符推荐使用gettid系统调用,它的类型是pid_t,并且是唯一的
__thread是GCC内置的线程局部存储设施,效率高,但注意初始化只能使用编译器常量
每个文件描述符只由一个线程操作
RAII封装文件描述符
不要使用多线程+fork
不要使用多线程+signal
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。