12、多线程编程的规则与库使用指南

多线程编程的规则与库使用指南

在多线程编程中,为了设计出高效、稳定的并发应用,需要遵循一些重要的规则,并合理使用相关的线程库。以下将详细介绍这些规则和线程库的使用方法。

1. 多线程编程的八条简单规则

在将串行应用转换为并发版本时,有八条简单规则需要牢记。
- 规则 5:使用正确的线程模型
- 当线程库不足以覆盖应用的所有并发需求,且必须使用用户控制的线程时,如果隐式线程模型(如 OpenMP 或 Intel Threading Building Blocks)能满足所有功能需求,就不要使用显式线程。显式线程虽能对线程实现进行更精细的控制,但如果只是对计算密集型循环进行并行化,或者不需要显式线程提供的额外灵活性,就没必要增加不必要的工作。实现越复杂,越容易出错,后续维护也越困难。
- OpenMP 专注于数据分解方法,尤其适用于处理大数据集的循环线程化。但可能存在外部要求禁止使用 OpenMP,此时需使用经批准的(显式)模型实现线程化。建议先使用 OpenMP 对计划的并发进行原型设计,估算潜在的性能提升、可扩展性以及用显式线程对串行代码进行线程化所需的工作量。
- 规则 6:切勿假设特定的执行顺序
- 串行计算中,容易预测程序中任意语句之后将执行的语句。但线程的执行顺序是不确定的,由操作系统调度器控制,无法可靠预测线程的执行顺序。这主要是为了隐藏应用内的执行延迟,特别是在核心数少于线程数的系统上运行时。当线程因需要不在缓存中的内存或处理 I/O 请求而阻塞时,调度器会换出阻塞线程,换入准备运行的线程。
- 这种调度的不确定性会导致数据竞争。如果假设一个线程在另一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值