Je voudrais utiliser NSOperations
dans mon application pour résoudre les problèmes de thread. J'ai lu quelques tutoriels et maintenant je sais ce que je dois faire, mais j'ai un problème. Il est indispensable d'avoir le même NSOperationQueue
dans chaque classe. Que faire si j'utilise un nouveau NSOperationQueue
dans chaque classe. Il y aura des problèmes de concurrence?Plusieurs NSOperationQueues?
3
A
Répondre
4
Vous ne rencontrez des problèmes de concurrence que si vous accédez à une ressource à partir de plusieurs threads. Si vos opérations ne partagent pas certaines ressources, cela devrait fonctionner, même si plus d'une NSOperationQueue est en cours d'exécution (NSOperationQueue exécute en interne plus d'un thread de toute façon).
Si vous partagez un NSOperationQueue sur plusieurs threads, vous devez probablement synchroniser les appels (en utilisant @synchronized (...)).
En fait, la documentation indique "Considérations multicœur: Il est sûr d'utiliser un seul objet NSOperationQueue à partir de plusieurs threads sans créer de verrous supplémentaires pour synchroniser l'accès à cet objet." L'ajout de la synchronisation des appels est donc redondant. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html#//apple_ref/doc/uid/TP40004592-RH2-SW5 – mikelikespie
Mais c'est juste pour les appels comme ajouter des tâches à un NSOperationQueue. Les tâches réelles peuvent s'exécuter sur plusieurs threads si NSOperationQueue est concurrent, les tâches ne doivent donc pas marcher sur les pieds des autres. – gnasher729