Coleta NSMutableArray e @Synchronized blocks

No Objective C estou usando uma instância NSMutableArray de vários segmentos e estou usando @synchronized para torná-lo thread seguro. Atualmente todos os meus acces para esta matriz são protegidos com um @synchronized block, mesmo objectAtIndex: method. No entanto, gostaria de saber quais métodos realmente precisam ser protegidos com @synchronized. preciso proteger o acesso de leitura?

O que aconteceria se 'ObjectAtIndex' não fosse protegido e chamado ao mesmo tempo que 'removeObject'?

Se todos os métodos são protegidos por um @synchronized e quanto ao desempenho? (Eu escrevo um servidor de jogo tcp / udp e realmente não quero superprotegê-los se isso diminuir o desempenho ou gerar bloqueios).

por exemplo, suponho que o método 'containsObject:' irá enumerar para localizar o objeto e que eu deveria evitar uma chamada concursiva para 'removeObject:' em outro thread.

Talvez uma boa solução seja ter bloqueios muito diferentes (para acesso de leitura e gravação) ...

Ajuda e sugestão são bem vindas!

Muito obrigado.

Por favor, encontre um código de exemplo abaixo para ilustrar:

@interface TestClass : NSObject
{
    NSMutableArray * array;
}

@end

@implementation TestClass

- (id)init
{
    self = [super init];
    if (self)
    {
        array = [NSMutableArray array];
    }
    return self;
}

-(id)objectAtIndex:(NSUInteger)index
{
    @synchronized(array) **// IS IT USEFUL OR NOT ??**
    {
        return [array objectAtIndex:index];
    }
}

-(void)removeObject:(id)object
{
    @synchronized(array)
    {
        [array removeObject:object];
    }
}

-(void)compute
{
    @synchronized(array)
    {
        for (id object in array)
        {
            [object compute];
        }
    }
}

@end

questionAnswers(2)

yourAnswerToTheQuestion