文件名称:线程安全设计的技巧-外军电台手册
文件大小:1.39MB
文件格式:PDF
更新时间:2024-06-27 16:33:58
objective-c ios
4.4 线程安全设计的技巧 同步工具是让你代码安全的有用方法,但是它们并非灵丹妙药。使用太多锁和其 他同步的类型原语和非多线程相比明显会降低你应用的线程性能。在性能和安全之间 寻找平衡是一门需要经验的艺术。以下各部分提供帮助你为你应用选择合适的同步级 别的技巧。 4.4.1 完全避免同步 对于你新的项目,甚至已有项目,设计你的代码和数据结构来避免使用同步是一 个很好的解决办法。虽然锁和其他类型同步工具很有用,但是它们会影响任何应用的 性能。而且如果整体设计导致特定资源的高竞争,你的线程可能需要等待更长时间。 实现并发最好的方法是减少你并发任务之间的交互和相互依赖。如果每个任务在 它自己的数据集上面操作,那它不需要使用锁来保护这些数据。甚至如果两个任务共 享一个普通数据集,你可以查看分区方法,它们设置或提供拷贝每一项任务的方法。 当然,拷贝数据集本身也需要成本,所以在你做出决定前,你需要权衡这些成本和使 用同步工具造成的成本那个更可以接受。 4.4.2 了解同步的限制 同步工具只有当它们被用在应用程序中的所有线程是一致时才是有效的。如果你 创建了互斥锁来限制特定资源的访问,你所有线程都必须在试图操纵资源前获得同一 互斥锁。如果不这样做导致破坏一个互斥锁提供的保护,这是编程的错误。 4.4.3 注意对代码正确性的威胁 当你使用锁和内存屏障时,你应该总是小心的把它们放在你代码正确的地方。即 使有条件的锁(似乎很好放置)也可能会让你产生一个虚假的安全感。以下一系列例