2013-12-06 3 views
0

Я разрабатываю приложение iOS и нуждаюсь в реализации решения проблемы, для которого мне нужно знать, сколько потоков ожидает блокировки одного и того же объекта NSLock.NSLock, количество потоков, ожидающих

В Java У меня есть класс ReentrantLock с методом getQueueLength, который «Возвращает оценку количества потоков, ожидающих получения этой блокировки».

Есть ли что-то подобное в Objective-C? Я пытался найти что-то, но ничего. Должен ли я подклассифицировать NSLock для реализации этого механизма самостоятельно?

ответ

0

Посмотрите на OSAtomic.h. Вы можете создать глобальный счетчик, затем до того, как поток попытается получить инкремент блокировки, а затем уменьшится. Чтобы прочитать текущее значение, вы добавите «0» к нему и посмотрите на возвращаемое значение. Я использовал их в течение многих лет на OSX и ios.

0

Вы можете создать подкласс NSLock с такой же функциональностью, переопределив методы lock, unlock и tryLock.

Пример:

@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 
Смежные вопросы