1. 构造函数线程安全的实现方法:
- 不要在构造函数中泄露this指针:
- 不要在构造函数中注册任何回调;
- 不要在构造函数中把this传给跨线程的对象。
建议使用二段式构造函数,即先创建构造函数,然后将回调注册或者是需要传给跨线程对象的操作放到一个单独的成员函数中去。二段式构造函数可以免去异常处理,通过单独的成员函数的返回值来判断是否创建对象成功。
即使是构造函数的最后一行也不要泄露this指针,因为这个类有可能是基类,生成派生类对象的时候先调用基类的构造函数,再调用派生类的构造函数,因此仍然有可能导致另外一个线程访问到这个派生类对象的半成品。
2. 析构函数的线程安全:
- 由于析构函数会销毁成员变量和成员函数,所以采用成员mutex的办法无法保证析构函数的线程安全。
3. 线程死锁:
- 线程死锁可能产生的原因:
- 给同一个类的两个对象加锁。