加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 互斥锁lock学习

发布时间:2020-12-14 06:45:05 所属栏目:百科 来源:网络整理
导读:一些学习过程中的难点解决 lock锁看了一片文章,写的很牛车:http://www.jb51.cc/article/p-dlsctegq-zv.html 例子 lock锁,我是用于两个线程同时执行一段代码或者一个方法,比如同时刷新auth认证,例如: class ViewController : UIViewController { let lo

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

lock锁看了一片文章,写的很牛车:http://www.52php.cn/article/p-dlsctegq-zv.html

例子

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读