Коллекция NSMutableArray и блоки @Synchronized

В Objective C я использую экземпляр NSMutableArray из различных потоков и использую @synchronized, чтобы сделать его потокобезопасным. в настоящее время все мои доступы к этому массиву защищены блоком @synchronized, даже objectAtIndex: метод. Тем не менее, мне интересно, какие вызовы методов действительно должны быть защищены с помощью @synchronized. мне нужно защитить доступ для чтения?

Что произойдет, если ObjectAtIndex не защищен и вызывается в то же время, что и removeObject?

Если все методы защищены @synchronized, как насчет производительности? (Я пишу игровой сервер tcp / udp и действительно не хочу чрезмерно защищать этот массив, если он уменьшит перф или генерирует блокировки).

например, я полагаю, что метод containsObject: будет перечислять, чтобы найти объект, и что мне следует избегать параллельного вызова removeObject: в другом потоке.

Возможно, хорошим решением было бы иметь слишком разные блокировки (для чтения и записи) ...

Помощь и предложение приветствуются!

Большое спасибо.

Ниже приведен пример кода для иллюстрации:

@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

Ответы на вопрос(2)

Ваш ответ на вопрос