如果libsqlite不是線程像libsqlite和dispatch_async
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
__block NSArray *__albumsCollection = albumCollections;
dispatch_apply(count, queue, ^(size_t i)
{
MPMediaItem *albumObj = [[__albumsCollection objectAtIndex:i] representativeItem];
///// making some sqlite queries
});
安全代碼將提高BAD_EXEC。
那麼如何使這個代碼線程安全的?
我的解決辦法是使用主隊列
dispatch_apply(count, dispatch_get_main_queue(), ^(size_t i)
{
/// my sqllite queries
});
但我並不感到滿意。如何讓它變得更好?
是的,除了他可能想串行調度隊列,以便只有一件事的時間運行。 (由於sqlite的,不能從多個線程同時訪問。)所以,他需要通過DISPATCH_QUEUE_SERIAL在dispatch_queue_create的第二個參數。 –
@JesseRusak:[「與DISPATCH_QUEUE_SERIAL或NULL創建調度隊列屬性調用塊串聯以FIFO的順序。」](https://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference /reference.html) – Regexident
是的,對不起,你是對的;我認爲另一種方式是默認的,因爲所有的全局隊列是併發的。 –