我正在开发一个iOS应用程序,需要为一个问题实现一个解决方案,为此我需要知道有多少线程正在等待锁定同一个NSLock对象。
在Java语言中,我有一个带有getQueueLength方法的类ReentrantLock,它“返回等待获取这个锁的线程数的估计值”。
Objective-C中也有类似的东西吗?我试着去找一些东西,但是一无所获。我应该自己实现这个机制的NSLock的子类吗?
发布于 2013-12-06 20:47:15
看看OSAtomic.h。您可以创建一个全局计数器,然后在线程尝试获取锁之前将其递增,然后在之后递减。要读取当前值,您可以向其“添加”0,然后查看返回值。我已经在OSX和ios上用了很多年了。
发布于 2013-12-06 20:59:43
您可以通过覆盖lock、unlock和tryLock方法来创建具有相同功能的NSLock的子类。
示例:
@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];
}
@endhttps://stackoverflow.com/questions/20423096
复制相似问题