多线程加锁:在iOS中解决多线程访问同一块内存的互斥同步问题
一.@synchronized(id anObject)——会自动对参数对象加锁,保证临界区的代码线程安全
@synchronized(self)
{
此段代码对其他@synchronized(self)也是互斥的
}
二.NSLock——之所以能加锁是因为它实现了NSLocking协议,协议中常用方法有:
1.lock——加锁
2.unLock——解锁
3.tryLock——尝试加锁,如果失败,线程不阻塞,返回NO
4.lockBeforeDate——在指定date之前暂时阻塞线程(如果没有获取锁),如果date到期还没有获取锁,则线程被唤醒,返回NO
NSLock * addLock = [NSLock alloc]init];
if([addLock lock])
{
//todosomething
[addLock unLock];
}
三.NSRecursiveLock(递归锁)——多次调用不会阻塞已获取该锁的线程
四.NSConditionLock(条件锁)——可以设置条件
五.NSDistributedLock(分布锁)——文件方式实现,可以跨进程,用tryLock方法获取锁,用unlock方法释放锁
如果一个获取锁的进程在释放锁之前挂了,那么锁就一直得不到释放了,此时可以通过breakLock强行获取锁