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