Effective Objective-C Notes:GCD 实现同步锁
本文名为《GCD 实现同步锁》,内容不止于锁。文章试图通过 GCD 同步锁的问题,尽量往外延伸扩展,以讲解更多 GCD 同步机制的内容。 引语:线程安全问题 如果一段代码所在的进程中有多个线程在同时运行,那么这些线程就有可能会同时运行这段代码。假如多个线程每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 由于可读写的全局变量及静态变量可以在不同线程修改,所以这两者也通常是引起线程安全问题的所在。在 Objective-C 中还包括属性和实例变量(实际上属性和实例变量本质上也可以看做类内的全局变量)。 Objective-C 同步锁 在 Objective-C 中,如果有多个线程执行同一份代码,那么有可能会出现线程安全问题。这种情况下,就需要一个同步机制来解决 —— 锁(lock)。在 Objective-C 中,有如下几种可用的锁: NSLock 实现锁 NSLock是Cocoa提供给我们最基本的锁对象,这也是我们经常所使用的锁之一。 . @synchronized 关键字构建的锁 synchronized指令实现锁的优点就是我们不需要在代码中显式的创建锁对象,便可以实现锁的机制