本文主要是介绍iOS关于锁的个人见解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2017-5-16 周三 晴 作者:快友技术部
iOS中thread有
1,NSObject的performSelector…
2,NSThread
3,Operation
4,GCD
5,pthread
其中,第2,4,5三种才算是真正的线程,因为第一个是一个selector,只是一个方法的实现而已,只是一个消息接受方法而已,不是线程
第三个,operation是一个线程的任务,一个线程能有很多任务,线程一般不能人为的去结束他,而operation任务确实可以人为去结束的
一,互斥锁
OC
下互斥锁的实现是通过 @synchronized 实现的,代码中创建一个互斥锁非常方便的方法 , 它防止不同的线程在同一时间获取同一个锁,然而 , 如果你传递的是同一个对象 , 那么多个线程中的一个线程会首先获得该锁 , 而其他线程将会被阻塞直到第一个线程完成它的临界区(多个线程都会访问的公用的区域,比如多个线程都要访问磁盘,这个磁盘就是临界区)
二,
NSLock
使用方法,当多个线程使用同一个锁,那么第一个锁住的对象有权访问资源,其他线程就会被阻塞成一个请求队列,直到第一个 lock 住资源的线程 unlock 资源,第二个线程去请求资源,同样会上锁,防止其他线程访问资源。
NSLock
的创建,自定义一个继承自 NSLock 的锁,
[lock lock];
//do some thing complete your task.
[lock unlock];
三,信号量锁,见 GCD 部分
四,递归锁
类定义的锁可以在同一线程多次获得 , 而不会造成死锁。一个递归锁会跟踪它被多少次成功获得了。每次成功的获得该锁都必须平衡调用锁住和解 锁的操作。只有所有的锁住和解锁操作都平衡的时候 , 锁才真正被释放给其他线程获 得
NSRecursiveLock *theLock = [[NSRecursiveLock alloc] init];
[theLock lock];
// do some thing .
[theLock unlock];
这篇关于iOS关于锁的个人见解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!