swift 互斥锁lock学习
2016-09-13 14:17
127 查看
一些学习过程中的难点解决
lock锁看了一片文章,写的很牛车:http://blog.csdn.net/hello_hwc/article/details/50037505例子
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,这样数据不会错乱
我的代码是这样的:case .Failure(let error): if response.response?.statusCode == 401{//刷新token dispatch_async(queue3) { () -> Void in lock?.lock()//这里添加互斥锁,防止一起刷新token,这样就会分开之行token方法cjq RefreshToken({ (AnyObject) in lock?.unlock() var hs = headers hs!["Authorization"] = NSUserDefaults.standardUserDefaults().stringForKey("access_token") } }, logOut: { (NSError) in logOut?() lock?.unlock() }) } }else{ failure?(error) } }
RefreshToken(success:((AnyObject?) -> Void)?, logOut:((NSError?) -> Void))是闭包函数
相关文章推荐
- 孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- 操作系统学习笔记(9) 互斥和同步的信号量算法
- C#多线程学习6——互斥对象
- 【线程同步学习笔记】C#中的lock关键字
- 学习笔记—多线程同步与互斥
- 操作系统学习笔记(10) 互斥和同步的经典问题
- 线程学习7——lock语句
- 初步学习lock的见解
- 孙鑫VC学习笔记:第十五讲 增加互斥条件实现线程同步
- Java6学习笔记57——多线程编程——线程的互斥(version 0.2)
- 浅谈C# 中的lock 方法与Monitor 类的关系_以及同步与互斥
- 操作系统学习笔记(8) 互斥和同步的实现算法
- 多线程学习笔记:lock
- lock语句及静态方法的互斥锁
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--互斥篇
- 操作系统学习笔记(13) 互斥与同步的经典问题 -哲学家进餐问题
- 线程学习之线程互斥
- Java多线程设计模式详解学习笔记八——Read-Write Lock Pattern