我正在开发一个iOS应用程序,需要实现一个问题的解决方案,我需要知道有多少线程在等待锁定同一个NSLock对象。
在Java中,我有ReentrantLock类,方法是getQueueLength,“返回对等待获取此锁的线程数的估计。”
Objective-C中有类似的东西吗?我试图找到一些东西,但没有。我应该将NSLock子类化为自己实现这种机制吗?
答案 0 :(得分:0)
查看OSAtomic.h。您可以创建一个全局计数器,然后在线程尝试获取锁定增量之前,然后减少。要读取当前值,请向其“添加”0并查看返回值。我已经在OSX和ios上使用了这些。
答案 1 :(得分:0)
您可以通过覆盖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