![](/img/trans.png)
[英]My program is executing out of order, I'm assuming because of some threads finishing before another. NSLock, GDC, suggestions?
[英]NSLock, number of threads waiting
我正在開發一個iOS應用程序,並且需要實現一個問題的解決方案,我需要知道有多少線程正在等待鎖定同一NSLock對象。
在Java中,我有ReentrantLock類,具有方法getQueueLength,該方法“返回等待獲取此鎖的線程數的估計值”。
在Objective-C中有類似的東西嗎? 我試圖找到一些東西,但是什么也沒有。 我應該自己繼承NSLock來實現此機制嗎?
查看OSAtomic.h。 您可以創建一個全局計數器,然后在線程嘗試獲取鎖之前先將其遞增,然后再遞減。 要讀取當前值,請向其“加” 0,然后查看返回值。 我已經在OSX和ios上使用了多年。
您可以通過覆蓋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];
}
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.