NSLock,等待的线程数

时间:2013-12-06 11:46:57

标签: ios objective-c multithreading nslock

我正在开发一个iOS应用程序,需要实现一个问题的解决方案,我需要知道有多少线程在等待锁定同一个NSLock对象。

在Java中,我有ReentrantLock类,方法是getQueueLength,“返回对等待获取此锁的线程数的估计。”

Objective-C中有类似的东西吗?我试图找到一些东西,但没有。我应该将NSLock子类化为自己实现这种机制吗?

2 个答案:

答案 0 :(得分:0)

查看OSAtomic.h。您可以创建一个全局计数器,然后在线程尝试获取锁定增量之前,然后减少。要读取当前值,请向其“添加”0并查看返回值。我已经在OSX和ios上使用了这些。

答案 1 :(得分:0)

您可以通过覆盖NSLocklockunlock方法来创建具有相同功能的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