iOS多线程

iOS的锁机制?都有哪些锁?
相同点:
都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。
不同点:
互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。

自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。

自旋锁的效率高于互斥
互斥锁:
NSLock
自旋锁:
os_unfair_lock_t

信号量
let semaphore = DispatchSemaphore(value: 1)
semaohore.wait() 信号量减1
semaphore.signal() 信号量加1
当信号量的值为0的时候 当前线程会一直阻塞
自旋锁:


GCD和NSOpertion的区别?
CGD是基于C的api ,NSoperation是基于GCD的封装,是面向对象的,相比GCD,NSOperation,更好的处理队列之间的依赖关系,缺点是比GCD稍慢
GCD更好处理任务,NSOperation更好的处理队列。

  1. NSOpertion 是面向对象,可以封装和继承
  2. operation方便异步建立依赖,
  3. 方便最大的并发数量
  4. 符合kvo的属性
  5. operation可以暂定 恢复 取消等操作
  6. 缺点是比CGD稍慢
  • Thread(最轻,灵活度高)
  • Cocoa Operation (队列+操作对象)
  • Grand Central Dispatch(调度队列+操作对象)

你可能感兴趣的:(iOS多线程)