SORU
31 Temmuz 2009, Cuma


Nasıl @kilit senkronize/Objective-C kilidini mı?

@Senkronize" ve "karşılıklı dışlama elde etmek için? kilidini "lock kullanmak değil mi Nasıl kilit/kilidini sonra mı?

Aşağıdaki programın çıktısı sadece "Merhaba Dünya".

@interface MyLock: NSLock<NSLocking>
@end

@implementation MyLock

- (id)init {
    return [super init];
}

- (void)lock {
    NSLog(@"before lock");
    [super lock];
    NSLog(@"after lock");
}

- (void)unlock {
    NSLog(@"before unlock");
    [super unlock];
    NSLog(@"after unlock");
}

@end


int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    MyLock *lock = [[MyLock new] autorelease];
    @synchronized(lock) {
        NSLog(@"Hello World");
    }

    [pool drain];
}

CEVAP
1 AĞUSTOS 2009, CUMARTESİ


Objective-C dil seviyesi senkronizasyon NSLock yaptığı gibi, zaman uyumu kullanır. Anlamsal bazı küçük teknik farklılıklar vardır, ama iki ayrı arayüzleri (daha fazla) ilkel ortak bir varlık üzerine uygulanan olarak düşünmek temelde doğru.

@synchronized oysa açık bir Kilidi var NSLock ile özellikle örtülü bir kilit eşitlemek için kullandığınız nesne ile ilişkili vardır. Dil düzeyi yararı kilitleme derleyici kapsayan konularda ki anlar, ama mekanik olarak onlar temelde aynı şekilde davranır.

Bir derleyici olarak @synchronized düşün yeniden yazabilirsiniz:

- (NSString *)myString {
  @synchronized(self) {
    return [[myString retain] autorelease];
  }
}

dönüşür:

- (NSString *)myString {
  NSString *retval = nil;
  pthread_mutex_t *self_mutex = LOOK_UP_MUTEX(self);
  pthread_mutex_lock(self_mutex);
  retval = [[myString retain] autorelease];
  pthread_mutex_unlock(self_mutex);
  return retval;
}

Bu gerçek bir dönüşüm daha karmaşık ve özyinelemeli kilitleri kullanır, çünkü tam olarak doğru değil, ama genelinde noktası almak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • Myron and Nejusha dance

    Myron and Ne

    2 AĞUSTOS 2012