簡體   English   中英

NSLock,正在等待的線程數

[英]NSLock, number of threads waiting

我正在開發一個iOS應用程序,並且需要實現一個問題的解決方案,我需要知道有多少線程正在等待鎖定同一NSLock對象。

在Java中,我有ReentrantLock類,具有方法getQueueLength,該方法“返回等待獲取此鎖的線程數的估計值”。

在Objective-C中有類似的東西嗎? 我試圖找到一些東西,但是什么也沒有。 我應該自己繼承NSLock來實現此機制嗎?

查看OSAtomic.h。 您可以創建一個全局計數器,然后在線程嘗試獲取鎖之前先將其遞增,然后再遞減。 要讀取當前值,請向其“加” 0,然后查看返回值。 我已經在OSX和ios上使用了多年。

您可以通過覆蓋lockunlocktryLock方法來創建具有相同功能的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM