0

私は iOS アプリを開発しており、同じ NSLock オブジェクトのロックを待機しているスレッドの数を知る必要があるという問題の解決策を実装する必要があります。

Java には、「このロックの取得を待機しているスレッドの推定数を返す」メソッド getQueueLength を備えたクラス ReentrantLock があります。

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 に答える