首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSLock,等待的线程数

NSLock,等待的线程数
EN

Stack Overflow用户
提问于 2013-12-06 19:46:57
回答 2查看 544关注 0票数 0

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

在Java语言中,我有一个带有getQueueLength方法的类ReentrantLock,它“返回等待获取这个锁的线程数的估计值”。

Objective-C中也有类似的东西吗?我试着去找一些东西,但是一无所获。我应该自己实现这个机制的NSLock的子类吗?

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 20:47:15

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

票数 0
EN

Stack Overflow用户

发布于 2013-12-06 20:59:43

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

示例:

代码语言:javascript
复制
@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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20423096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档