iOS关于锁的个人见解

来源:互联网 发布:硬笔书法字帖推荐 知乎 编辑:程序博客网 时间:2024/06/04 19:43
2017-5-16 周三 晴 作者:58婚恋技术部

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];

原创粉丝点击