1、@synchronized简介
@synchronized是对mutex递归锁的封装,可以通过 objc源码 中的objc-sync.mm查看:
int objc_sync_enter(id obj){......SyncData* data = id2data(obj, ACQUIRE);data->mutex.lock();......}
加锁时会调用objc_sync_enter方法,取出保存的data,调用mutex的加锁方法,data是通过obj作为key保存在内部的哈希表中。
解锁时会调用objc_sync_exit方法:
int objc_sync_exit(id obj){......data->mutex.tryUnlock();......}
2、@synchronized使用
以卖票为例:
- (void)__saleTicket {@synchronized (self.ticketToken) {// objc_sync_enter[super __saleTicket];}// objc_sync_exit}
传入的token可以是self或者其他任意类型
