1、NSLock
NSLock是对mutex普通锁的封装,可以通过 GNUstep源码 中的NSLock.m查看:
+ (void) initialize
{
......
pthread_mutexattr_init(&attr_normal);
pthread_mutexattr_settype(&attr_normal, PTHREAD_MUTEX_NORMAL);
......
pthread_mutex_init(&deadlock, &attr_normal);
......
}
}
有如下API:
- (void)NSLockAPI {
// 初始化
NSLock *lock = [[NSLock alloc] init];
// 加锁
[lock lock];
// 解锁
[lock unlock];
// 尝试加锁
[lock tryLock];
// 在指定时间内加锁
[lock lockBeforeDate:[NSDate dateWithTimeIntervalSinceNow:1]];
}
应用举例:
- (void)__saleTicket {
[self.ticketLock lock];
[super __saleTicket];
[self.ticketLock unlock];
}
2、NSRecursiveLock
NSRecursiveLock也是对mutex递归锁的封装,API跟NSLock基本一致,可以通过 GNUstep源码 中的NSLock.m查看:
+ (void) initialize
{
......
pthread_mutexattr_init(&attr_recursive);
pthread_mutexattr_settype(&attr_recursive, PTHREAD_MUTEX_RECURSIVE);
......
}