Colección NSMutableArray y bloques @Synchronized

En Objective C, estoy usando una instancia de NSMutableArray de varios subprocesos y estoy usando @synchronized para hacerlo seguro. Actualmente, todos mis accesos a esta matriz están protegidos con un bloque @synchronized, incluso objectAtIndex: method. Sin embargo, me pregunto qué métodos de llamada realmente necesitan estar protegidos con @synchronized. ¿Necesito proteger el acceso de lectura?

¿Qué pasaría si 'ObjectAtIndex' no está protegido y se llama al mismo tiempo que 'removeObject'?

Si todos los métodos están protegidos por un @synchronized, ¿qué pasa con el rendimiento? (Escribo un servidor de juegos tcp / udp y realmente no quiero sobreproteger esta matriz si disminuye el rendimiento o genera bloqueos).

por ejemplo, supongo que el método 'contenerObjeto:' se enumera para encontrar el objeto y que debo evitar una llamada concurrente a 'eliminarObjeto:' en otro hilo.

Quizás una buena solución sería tener bloqueos muy diferentes (para acceso de lectura y escritura) ...

Ayuda y sugerencia son bienvenidas!

Muchas gracias.

Por favor, encuentre un código de ejemplo a continuación 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

Respuestas a la pregunta(2)

Su respuesta a la pregunta