多线程之GCD,以及自旋锁OSSpinLock

今天在是用reactivecocoa这个类库的时候,发现里面大量的是用自旋锁.由于之前没有接触过,就顺道查询了一下.然后对它有了一个大致的认识.主要是防止出现竞争资源这种情况,和@synchronized类似(在不考虑性能的情况下直接是用synchronized就可以).性能对比如下:

多线程之GCD,以及自旋锁OSSpinLock_第1张图片
可以看出OSSpinLock处理效率比synchronized要快很多.如果是频繁操作,推荐使用.

之后有温习一遍GCD的相关知识,模拟在并发队列里面同时对一个资源赋值,加锁和不加锁的区别:


多线程之GCD,以及自旋锁OSSpinLock_第2张图片
不加锁


多线程之GCD,以及自旋锁OSSpinLock_第3张图片
加锁之后

通过对比可以发现,不加锁的时候,任务结束时间是随即乱序的,但是加锁之后是升序的.

当然在异步执行的队列里面,也可以是用dispatch_barrier_async 确保之前的异步队列执行完成之后在执行后面的block的内容.也可以用它防止资源竞争.

你可能感兴趣的:(多线程之GCD,以及自旋锁OSSpinLock)