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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值