muduo学习之线程
知识点来源于陈硕的《Linux多线程服务端编程》以及一些博客。
竞态条件(race condition)
- 在即将析构一个对象时,如何得知是否有别的线程正在使用该对象的成员函数?
- 如何保证在执行对象的成员函数时,该对象不会在别的线程被析构?
- 在调用某个对象的成员函数时,如何判断该对象存活?
线程安全
一个线程安全的class应该满足以下三个条件
- 多个线程同时访问时,其表现出正确的行为。
- 无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织(interleaving)。
- 调用端代码无需额外的同步或其他协调操作
对象构造做到线程安全
唯一要求:构造期间不要泄露this指针
- 不要在构造函数中注册任何回调
- 不要在构造函数中把this传给跨线程的对象
- 即便在构造函数最后一行也不行