Nasıl @kilit senkronize/Objective-C kilidini mı? | Netgez.com
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

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • K-391

    K-391

    23 EKİM 2012
  • paikimchung

    paikimchung

    12 Mayıs 2006