// 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 不会被其他线程改变
}
}