870920 Menu

多线程编程的几点建议与忠告

首先要了解、规划和设计当前执行流程和异步并发的多个任务所对应的整体线程结构与线程间的依赖关系。尽量减少线程间的依赖关系,特别是循环依赖。

如有共享数据需在多个线程中并发写入,优先使用C++的volatile关键字(声明数据成员时),而后是atomic原子类,不得已或不影响效率和功能的前提下,才使用CriticalSection临界区和ScopedLock作用域锁。

如牵扯到缓冲数据,优先使用基于Lock-free技术的环形(ring)缓冲类。

永远不要在GUI主线程上执行耗时的运算处理,除非该运算耗时非常短暂。

如果一个变量可被多个线程读写,那么在读和写时始终要锁定之。

永远不要长时间持有(存在)一个锁对象。使之尽可能短的存在,比如在函数中即将读写之前创建锁的栈对象,读写语句之后马上让其自销毁(这几条语句可置于一个花括号包裹的代码作用域中)。

同一时间,不要存在并持有两个锁。如果确实无法避免,则要确保按相同的顺序持有和使用它们。

等等。