swift 互斥锁lock学习

来源:互联网 发布:淘宝旺铺全屏代码 编辑:程序博客网 时间:2024/06/06 19:23

一些学习过程中的难点解决

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))是闭包函数

0 0