@synchronized使用和深入分析

@synchronized关键字在Objective-C中的应用,通过线程安全队列的实例,展示了其在多线程同步中的便利性和可读性优势,对比NSLock的使用。
摘要由CSDN通过智能技术生成

@synchronized 结构所做的事情跟锁(Lock)类似:它防止不同线程同事执行同一段代码。但在某些情况下,相比于使用NSLock创建锁对象、加锁和解锁来说,@synchronized用着更方便,可读性更高。

下面用一个线程安全的队列作为例子:

@implementation ThreadSafeQueue {
  NSMutableArray *_elements;
  NSLock *_lock;
}

- (instancetype)init {
  self = [super init];
  if (self) {
    _elements = [NSMutableArray array];
    _lock = [[NSLock alloc] init];
  }
  return self;
}

- (void)push:(id)element {
  [_lock lock];
  [_elements addObject:element];
  [_lock unlock];
}

@end
  /*
  上面的ThreadSafeQueue类有个init方法,它初始化了一个_elements数组和一个NSLock实例。这个类还有个push:方法,它先获取锁、然后向数组中插入元素、最终释放锁。可能会有许多线程同时调用pash:方法,但是[_elements addObject:element]这行代码在任何时候将智慧在一个线程上运行。步骤如下:
  1.线程A调用push:方法
  2.线程B调用push:方法
  3.线程B调用[_lock lock]因为当前没有其他线程持有锁,线程B获得了锁
  4.线程A调用[_lock lock],但是锁已经被线程B占了所以方法调用并没有返回-这回暂停线程A的执行
  5.线程B向_e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值