Общие методы блокировки или синхронизации интерфейса пользователя / модели / диска для облачной поддержки - PullRequest
0 голосов
/ 18 августа 2011

Я реализую метод облачной синхронизации в приложении «обувной коробки» под Mac OS X Lion, и я (как и ожидалось) быстро сталкиваюсь с проблемами потоков / синхронизации.

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

Например, мое приложениеимеет несколько критических поведений:

  • Периодически сохраняет на диск и при изменении модели. (Для поддержки автоматического / внезапного завершения в OS X Lion.)
  • Периодически уведомляется, когда на диске доступна новая сериализованная модель.
  • Обновляет пользовательский интерфейс, когда модельна диск загружается в память или когда сообщается о любых изменениях модели, которые не были вызваны действиями пользователя.

Вот пример использования, который вызывает временную травму мозга:

  1. Пользователь просматривает список элементов модели в приложении.
  2. Одновременно приложение уведомляется о новой модели на диске.Приложение загружает модель в память, сохраняя ее во временную переменную.
  3. Как приложение может заменить старую иерархическую модель данных на новую, не повреждая поток пользовательского интерфейса?Например, есть основной объект RootElement , содержащий множество элементов ChildElement .Если поток пользовательского интерфейса выполняет итерации по myRootElement.children , как можно заменить объект myRootElement без вмешательства?(Например, изменяя список при перечислении.)

Больше, чем конкретное решение, я ищу любые предыдущие ресурсы / методы / парадигмы, чтобы помочь разработать приложение для такого параллелизма и потокабезопасность.

1 Ответ

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

Документы Apple Dev достаточно хороши в этом вопросе.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

Вам понадобятся, в частности, NSLock знания.Кажется, NSLock является ближайшим эквивалентом Mutex или CriticalSection, если вы знаете эти термины.

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