文件名称:同步工具-外军电台手册
文件大小:1.39MB
文件格式:PDF
更新时间:2024-06-27 16:33:58
objective-c ios
第四章 线程同步 应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两 个线程同时修改同一资源有可能以意想不到的方式互相干扰。比如,一个线程可能覆 盖其他线程改动的地方,或让应用程序进入一个未知的潜在无效状态。如果你幸运的 话,受损的资源可能会导致明显的性能问题或崩溃,这样比较容易跟踪并修复它。然 而如果你不走运,资源受损可能导致微妙的错误,这些错误不会立即显现出来,而是 很久之后才出现,或者导致其他可能需要一个底层的编码来显著修复的错误。 但涉及到线程安全时,一个好的设计是最好的保护。避免共享资源,并尽量减少 线程间的相互作用,这样可以让它们减少互相的干扰。但是一个完全无干扰的设计是 不可能的。在线程必须交互的情况下,你需要使用同步工具,来确保当它们交互的时 候是安全的。 Mac OS X和 iOS提供了你可以使用的多个同步工具,从提供互斥访问你程序的有 序的事件的工具等。以下个部分介绍了这些工具和如何在代码中使用他们来影响安全 的访问程序的资源。 4.1 同步工具 为了防止不同线程意外修改数据,你可以设计你的程序没有同步问题,或你也可 以使用同步工具。尽管完全避免出现同步问题相对更好一点,但是几乎总是无法实现。 以下个部分介绍了你可以使用的同步工具的基本类别。 4.1.1 原子操作 原子操作是同步的一个简单的形式,它处理简单的数据类型。原子操作的优势是 它们不妨碍竞争的线程。对于简单的操作,比如递增一个计数器,原子操作比使用锁 具有更高的性能优势。 Mac OS X和 iOS包含了许多在 32位和 64位执行基本的数学和逻辑运算的操作。 这些操作都使用了原子版本来操作比较和交换,测试和设置,测试和清理等。查看支 持原子操作的列表,参阅/user/include/libkern/OSAtomic.h 头文件和参见 atomic 主页。