保证多线程程序稳定的一些要点
1. 尽量不要detach线程,除非你能保证这个线程所操作的对象无论在什么时候都不会为空,即使全局对象释放了也不会操作空对象。
2. 不要随机地启动一堆线程后放任它们自由初始化。对所有线程模块的初始化要严格管理。必要时要添加Loader模块和依赖表来控制其初始化及启动。
3. 在进行join线程时要选进行joinable检查,并使用try-catch捕获join的异常。
4. 对运行状态的判断等一些量尽量选用std::atomic<T>型变量来处理。
5. 善用锁。
6. 不要使用sleep()、usleep()这些函数,它们是非线程安全的。要sleep时使用std::this_thread::sleep_for()或std::this_thread::yield()。
7. 对于要保证固定频率的线程,使用std::condition_variable.wait_for(),而非std::this_thread::sleep_for()。sleep_for是休眠固定时间,不能实现稳定频率的输出。另外,使用信号量等待会便于中途打断,以免系统退出时会卡在sleep上无法中断线程。
8. 要严格控制线程的优先级。
想到更多再补充。