前端之家收集整理的这篇文章主要介绍了
swift 互斥锁lock学习,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一些学习过程中的难点解决
@H_
403_3@lock锁看了一片
文章,写的很牛车:
http://www.jb51.cc/article/p-dlsctegq-zv.html
例子
@H_
403_3@lock锁,我是用于两个线程同时执行一段
代码或者一个
方法,比如同时刷新auth认证,例如:
class ViewController: UIViewController {
let lock = NSLock()
var person = Person(name: "Leo",age: 23)
override func viewDidLoad() {
super.viewDidLoad()
let queue1 = dispatch_queue_create("com.test.queue1",DISPATCH_QUEUE_SERIAL)
let queue2 = dispatch_queue_create("com.test.queue1",DISPATCH_QUEUE_SERIAL)
dispatch_async(queue1) { () -> Void in
self.lock.lock()
self.person.update("queue1",delay: 2,age: 1)
self.lock.unlock()
}
dispatch_async(queue2) { () -> Void in
self.lock.lock()
self.person.update("queue2",delay: 1,age: 2)
self.lock.unlock()
}
self.performSelector("logPerson",withObject: nil,afterDelay: 4)
// Do any additional setup after loading the view,typically from a nib.
}
func logPerson(){
NSLog("%@ %d",person.name,person.age)
}
}
这样就会当执行 self.person.update(“queue2”,delay: 1,age: 2)时候锁定,执行完后释放锁,然后下一个线程才会重新调用update,这样数据不会错乱
@H_
403_3@我的
代码是这样的:
case .Failure(let error):
if response.response?.statusCode == 401{
dispatch_async(queue3) { () -> Void in
lock?.lock()
RefreshToken({ (AnyObject) in
lock?.unlock()
var hs = headers
hs!["Authorization"] = NSUserDefaults.standardUserDefaults().stringForKey("access_token")
}
},logout: { (NSError) in
logout?()
lock?.unlock()
})
}
}else{
failure?(error)
}
}
@H_
403_3@RefreshToken(success:((AnyObject?) -> Void)?,
logout:((NSError?) -> Void))是闭包
函数