自旋锁和互斥锁
2019-11-22 本文已影响0人
雨天多久就
自旋锁
属于busy_waiting类型的锁。 当线程访问资源的时候,发现资源被占据,就会不停地循环在那里,等待资源释放。
优点:避免了切换线程带来的牺牲,效率高于互斥锁
缺点:如果资源不能很快被释放,就会一直循环,使得CPU效率降低。
注:OC中的自旋锁OSSpinLock,现在不建议使用。当一个低优先级的线程在使用资源的时候,一个高优先级的线程在进行循环等待。由于高优先级线程比低优先级线程有更高的优先权,占据了CPU,会导致低优先级线程迟迟不能释放资源,导致相互等待的情况。
互斥锁
属于sleep_waiting类型,当线程访问资源的时候,发现资源被占据,就会休眠,以等待资源释放。
dispatch_semaphore ,pthread_mutex,NSLock,NSCondition等等都是互斥锁。
从别人的实验来看,目前信号量dispatch_semaphore和pthread_mutex效率比较高。
注:YYCache中内存缓存使用的是pthread_mutex来保证线程安全,硬盘缓存使用的是dispatch_semaphore来保证线程安全