синхронизация одноэлементных объектов iphone - PullRequest
1 голос
/ 21 мая 2010

Я работаю над приложением для iphone, но это, вероятно, общий вопрос.

У меня есть одноэлементный класс Model, и были бы сценарии, в которых было бы несколько NSOperations (потоков) и которые работали бы с singleton-объектом. Если все они вызывают один и тот же метод в этом объекте, нужно ли мне иметь какой-нибудь механизм блокировки?

Или этот метод может выполняться только по одному за раз?

У меня нет опыта работы в области компьютерных наук, но я предполагаю, что все потоки будут иметь свой CALL по одному и тому же адресу (этот метод). Также можете ли вы предложить хорошую книгу для начинающих программистов, которая обсуждает общие концепции программирования. У меня нет мозгов для книг Кнута вроде.

Ответы [ 2 ]

1 голос
/ 21 мая 2010

Обычно вам нужно беспокоиться о синхронизации только в том случае, если данные модифицированы (даже если только один «поток» изменяет их, а остальные только читают). Если один или несколько потоков изменяют данные в синглтоне (или любые данные, на которые ссылается синглтон), то вам нужен какой-то алгоритм для борьбы с конфликтом данных (начинающие должны придерживаться алгоритмов на основе «блокировки»). Это относится ко всем данным, разделяемым несколькими потоками, а не только одиночными.

Функции не имеют ничего общего с проблемой (хотя функции часто изменяют данные, и одна и та же функция изменяет одни и те же данные и считывает их при вызове в нескольких потоках). Если функция является const-функцией (то есть не может / не будет изменять никакие данные, тогда безопасно вызывать несколько потоков, если ничто другое не касается данных, которые читает функция).

0 голосов
/ 21 мая 2010

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

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

...