Множественный ввод / вывод с изменяемым объектом из разных асинхронных запросов - PullRequest
0 голосов
/ 26 августа 2011

Это еще не произошло со мной, но я задался вопросом, не является ли проблемой вставка данных в одни и те же сохраненные NSMutableDictionary или NSMutableArray для многих различных асинхронных запросов. Есть ли риск, что два разных метода одновременно вставляют данные и каким-то образом получение изменяемого объекта препятствует доступу, за исключением одного процесса за раз?

В моем случае у меня есть асинхронная HTTP-очередь, и когда ответы возвращаются из Интернета, они анализируются и вставляются в один и тот же NSMutableDictionary. Если у вас есть несколько запросов на выполнение, потенциально десятки или сотни, есть ли риск, что что-то может произойти, потому что все они одновременно взаимодействуют с одним и тем же объектом?

1 Ответ

0 голосов
/ 26 августа 2011

Всегда существует риск, когда два потока могут изменять данные одновременно. Для наиболее простого случая вы можете использовать синхронизацию следующим образом:

@synchronized (self) {
  [someMutabelArray addObject:someObject];
}

Для более сложной ситуации, когда someMutabelArray можно изменить из множества различных методов, вам нужно будет использовать NSLock или один из других классов, соответствующих протоколу NSLocking, который лучше всего соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...