Kolekcja NSMutableArray i bloki @Synchronized

W Objective C używam instancji NSMutableArray z różnych wątków i używam @synchronized, aby uczynić go wątkiem bezpiecznym. obecnie wszystkie moje dostępu do tej tablicy są chronione blokiem @synchronizowanym, nawet objectAtIndex: method. Niemniej jednak zastanawiam się, które metody wywołania naprawdę wymagają ochrony za pomocą @synchronized. czy muszę chronić dostęp do odczytu?

Co by się stało, gdyby obiekt „ObjectAtIndex” nie był chroniony i wywoływał jednocześnie „removeObject”?

Jeśli wszystkie metody są chronione przez synchronizację @ co z wydajnością? (Piszę serwer gier tcp / udp i naprawdę nie chcę nadmiernie chronić tych tablic, jeśli zmniejszy to perf lub wygeneruje blokady).

na przykład przypuszczam, że metoda 'includesObject:' wyliczy, aby znaleźć obiekt i że powinienem unikać wywołania concurent do 'removeObject:' w innym wątku.

Być może dobrym rozwiązaniem byłoby posiadanie zbyt różnych blokad (do odczytu i zapisu) ...

Pomoc i sugestie są mile widziane!

Wielkie dzięki.

Znajdź przykładowy kod poniżej, aby zilustrować:

@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