首页 > 技术文章 > 保证多线程程序稳定的一些要点

qyit 2021-03-05 15:45 原文

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. 要严格控制线程的优先级。

 

想到更多再补充。

推荐阅读