Безопасно ли обращаться к объектам с разными индексами в NSMutableArray из отдельных потоков? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть NSMutableArray с некоторыми объектами, и я знаю, что NSMutableArray не является потокобезопасным классом. Интересно, можно ли получить доступ к каждому объекту в этом массиве из другого потока следующим образом:

for (int i = 0; i < muArr.count; i++) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        muArr[i] = [[NSObject alloc] init];
    });
}

1 Ответ

0 голосов
/ 21 апреля 2020

Ваш фрагмент кода не обращается к каждому объекту в массиве (muArr), это установка это. Определение «не потокобезопасного» исключает гарантированный безопасный доступ на запись ...

Когда вы используете dispatch, вы можете создать контролируемый доступ к изменяемому массиву, что-то вроде:

  • Создание параллельной очереди отправки для использования с массивом
  • Операции записи могут отправляться как асинхронные барьерные операции в эту очередь
  • Операции чтения являются синхронными операциями
  • Вы можете обернуть все это в подкласс NSMutableArray, если вы sh, просто следуйте требованиям подкласса для него, приведенным в документации.

Если вы застряли в проектировании и Реализуя что-то подобное, задайте новый вопрос (предварительно проверив SO и другие источники), показывая ваш код и объясняя вашу проблему, и кто-то, несомненно, поможет вам.

HTH

...