1:原子操作 - OSAtomic系列函数
iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>。不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的。因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内。
2:锁 - NSLock系列对象
iOS平台下的锁对象为NSLock对象,进入锁通过调用lock函数,解锁调用unlock函数(因为iOS中大部分的线程同步类都继承自NSLocking协议,所以其加锁/解锁的操作基本都为lock/unlock函数),同一个NSLock对象成功调用lock函数后,在其显式unlock之前任何线程都不能再对此NSLock对象加锁,以达到互斥访问的目的。除了lock函数,对NSLock加锁的函数还包括tryLock以及lockBeforeDate函数,lock函数在成功加锁之间会一直阻塞,而tryLock会尝试加锁,如果不成功,不会阻塞,而是直接返回NO,lockBeforeDate则是阻塞到传入的NSDate日期为止。
除了NSLock,iOS还提供了NSRecursive、NSConditionLock类型的锁类型。NSRecursive与NSLock最大的区别就是NSRecursive是可重入的,也就是说一个线程可以对一个NSRecursive对象多次调用lock,只要解锁时调用相同次数的unlock函数便可。NSConditionLock是一种带有条件的锁对象,除了基本的lock与unlock函数,还提供了lockWithCondition以及unlockWithCondition,这两个函数接收整型类型的数据作为参数,只有当一个unlockWit