Temel olarak, bir NSDictionary
numaralı veri kümem var, ancak kolaylık sağlamak için birkaç farklı şekilde sıralanmış ve filtrelenmiş verilerle NSArray
s ayarlıyorum. Veriler farklı iş parçacıkları (bloklar) ile geliyor olacak ve veri mağazamı değiştirerek bir kerede sadece bir blok olduğundan emin olmak istiyorum.Senkronize blok ve GCD'ye karşı dispatch_async()
Bu öğleden sonra bir gönderi kuyruğu kurma zahmetinden geçtim ve ardından rastgele bir şekilde, tam olarak ne yapmak istediğimi hemen hemen tam olarak gösteren @synchronized
ile ilgili bir yazıya rastladım.
Yani şu anda ne ...
// a property on my object
@property (assign) dispatch_queue_t matchSortingQueue;
// in my object init
_sortingQueue = dispatch_queue_create("com.asdf.matchSortingQueue", NULL);
// then later...
- (void)sortArrayIntoLocalStore:(NSArray*)matches
{
dispatch_async(_sortingQueue, ^{
// do stuff...
});
}
Ve benim sorum, ben sadece aşağıdaki tüm bu yerini alabilir edilir?
- (void)sortArrayIntoLocalStore:(NSArray*)matches
{
@synchronized (self) {
// do stuff...
};
}
... Ve yine ikisi arasındaki fark nedir? Ne düşünmeliyim?
'@ synchronized' gerçekten yavaş. Şu anda aradığım metrikleri bulamıyorum, ayrıca https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html adresini de kontrol edemiyorum. – Richard
Verileriniz aynı gönderim kuyruğu (aynı iş parçacığı) üzerinden geliyorsa, çarpışmayacaktır. Farklı kuyruklar (farklı iş parçacıkları) kullanacaksanız, senkronizasyon gerekli olacaktır. – Jeremy
Bulunan (http://stackoverflow.com/q/10094361/480850 yoluyla) o: http://perpendiculo.us/?p=133 – Richard