0

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

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

Objective-C中有类似的东西吗?我试图找到一些东西,但什么也没有。我应该继承 NSLock 来自己实现这个机制吗?

4

2 回答 2

0

您可以通过覆盖,和方法来创建NSLock具有相同功能的子类。lockunlocktryLock

例子:

@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
于 2013-12-06T12:59:42.913 回答
0

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

于 2013-12-06T12:47:14.530 回答