1、NSLock

NSLock是对mutex普通锁的封装,可以通过 GNUstep源码 中的NSLock.m查看:

  1. + (void) initialize
  2. {
  3. ......
  4. pthread_mutexattr_init(&attr_normal);
  5. pthread_mutexattr_settype(&attr_normal, PTHREAD_MUTEX_NORMAL);
  6. ......
  7. pthread_mutex_init(&deadlock, &attr_normal);
  8. ......
  9. }
  10. }

有如下API:

  1. - (void)NSLockAPI {
  2. // 初始化
  3. NSLock *lock = [[NSLock alloc] init];
  4. // 加锁
  5. [lock lock];
  6. // 解锁
  7. [lock unlock];
  8. // 尝试加锁
  9. [lock tryLock];
  10. // 在指定时间内加锁
  11. [lock lockBeforeDate:[NSDate dateWithTimeIntervalSinceNow:1]];
  12. }

应用举例:

  1. - (void)__saleTicket {
  2. [self.ticketLock lock];
  3. [super __saleTicket];
  4. [self.ticketLock unlock];
  5. }

2、NSRecursiveLock

NSRecursiveLock也是对mutex递归锁的封装,API跟NSLock基本一致,可以通过 GNUstep源码 中的NSLock.m查看:

  1. + (void) initialize
  2. {
  3. ......
  4. pthread_mutexattr_init(&attr_recursive);
  5. pthread_mutexattr_settype(&attr_recursive, PTHREAD_MUTEX_RECURSIVE);
  6. ......
  7. }