zoukankan      html  css  js  c++  java
  • 保证多线程程序稳定的一些要点

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

    想到更多再补充。

  • 相关阅读:
    bzoj3832
    bzoj2117
    bzoj1095
    BZOJ 4247: 挂饰 题解
    1296: [SCOI2009]粉刷匠
    3163: [Heoi2013]Eden的新背包问题
    2287: 【POJ Challenge】消失之物
    1334: [Baltic2008]Elect
    2748: [HAOI2012]音量调节
    1606: [Usaco2008 Dec]Hay For Sale 购买干草
  • 原文地址:https://www.cnblogs.com/qyit/p/14486606.html
Copyright © 2011-2022 走看看