多线程编程的几点思考与忠告

  1. 首先要了解、规划和设计当前执行流程和异步并发的多个任务所对应的整体线程结构与线程间的依赖关系。尽量减少线程间的依赖关系,特别是循环依赖。
  2. 如有共享数据需在多个线程中并发写入,优先使用C++的volatile关键字(声明数据成员时),而后是atomic原子类,不得已或不影响效率和功能的前提下,才使用CriticalSection临界区和ScopedLock作用域锁。
  3. 如牵扯到缓冲数据,优先使用基于Lock-free技术的环形缓冲类。
  4. 永远不要在GUI主线程上执行耗时的运算处理,除非该运算耗时非常短暂。
  5. 如果一个变量可被多个线程读写,那么在读和写时始终要锁定之。
  6. 永远不要长时间持有(存在)一个锁对象。使之尽可能短的存在,比如在函数中即将读写之前创建锁的栈对象,读写语句之后马上让其自销毁(这几条语句可置于一个花括号包裹的代码作用域中)。
  7. 同一时间,不要存在并持有两个锁。如果确实无法避免,则要确保按相同的顺序持有和使用它们。
  8. 有些问题,完全没必要动用线程。每次新开线程之前都要问问自己:是否还有更好的解决方案。

等等。

SwingCoder

如果本文对您有所启发或助益,请微信打赏

创作时间: 2015.03.19 01:56
最后修改: 2017.09.30 01:50

本文版权:UnderwaySoft   共享协议:署名-非商业使用-禁止演绎


上一篇: 关于JUCE GUI程序的外观总控
下一篇: 浅谈多线程共享数据的保护

 随机推荐:
Email: underwaySoft@126.com 微信公众号: UnderwaySoft