Swift 中的 Lock

2017-02-05  本文已影响33人  fordring2008

// Lock

// OC 中最常用的锁是 互斥锁, 即 @synchronized

/*

@synchronized(anObj){

// 在括号内, anObj 不会被其他线程改变

}

*/

// 其实 OC 中的 @synchronized 是默认的调用了 objc_sync_enter(anObj) 和 objc_sync_exit(anObj) 这两个方法

// Swift 可以直接写成

func myMethod(anObj: AnyObject!){

objc_sync_enter(anObj)

// 在 enter 和 exit 之间  anObj 不会被其他线程改变

objc_sync_exit(anObj)

}

// 更简单一点,定义一个方法,默认 OC 中

func synchronized(_ lock: AnyObject, closure:()->()){

objc_sync_enter(lock)

closure()

objc_sync_exit(lock)

}

// 使用的时候如下

func myMethodLocked(anObj: AnyObject!){

synchronized(anObj) {

// 括号内 anObj 不会被其他线程改变

}

}

上一篇下一篇

猜你喜欢

热点阅读