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