我正在开发一个 iOS 应用程序,需要为我需要知道有多少线程正在等待锁定同一个 NSLock 对象的问题实施解决方案。
在 Java 中,我有类 ReentrantLock,方法是 getQueueLength,它“返回等待获取此锁的线程数的估计值”。
Objective-C中有类似的东西吗?我试图找到一些东西,但什么也没有。我应该继承 NSLock 来自己实现这个机制吗?
我正在开发一个 iOS 应用程序,需要为我需要知道有多少线程正在等待锁定同一个 NSLock 对象的问题实施解决方案。
在 Java 中,我有类 ReentrantLock,方法是 getQueueLength,它“返回等待获取此锁的线程数的估计值”。
Objective-C中有类似的东西吗?我试图找到一些东西,但什么也没有。我应该继承 NSLock 来自己实现这个机制吗?
您可以通过覆盖,和方法来创建NSLock
具有相同功能的子类。lock
unlock
tryLock
例子:
@interface ReentrantLock : NSLock
@property (atomic) NSInteger numberOfThreads;
- (void)lock;
- (void)unlock;
- (BOOL)tryLock;
@end
@implementation ReentrantLock
- (void)lock {
self.numberOfThreads += 1;
[super lock];
}
- (void)unlock {
self.numberOfThreads -= 1;
[super unlock];
}
- (BOOL)tryLock {
self.numberOfThreads += 1;
return [super tryLock];
}
@end
查看 OSAtomic.h。您可以创建一个全局计数器,然后在线程尝试获取锁之前将其递增,然后再递减。要读取当前值,您“添加” 0 并查看返回值。我已经在 OSX 和 ios 上使用了多年。