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

Должен ли я объявить NSLock атомарным, или это просто пустая трата времени, а сам замок должен быть не атомарным?

3 ответа

Решение

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

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

Думаю об этом. Если у вас есть свойство, которое возвращает NSLock, будет ли когда-либо вызываться сеттер? Или это будет ужасная ошибка, которая может повредить ваше приложение повсюду?

Что вы должны сделать, это взглянуть на @synchronized и выяснить, может ли это быть немного, намного проще в использовании, чем NSLock.

Должен ли я объявить NSLock атомарным, или это просто пустая трата времени, а сам замок должен быть не атомарным?

По умолчанию все свойства в Objective-C являются атомарными. Так что нет необходимости объявлять NSLock атомарным. А также от вашего требования зависит, хотите ли вы объявить неатомарным, в основном неатомный атрибут используется для многопоточности. Если вы установили неатомарный атрибут во время объявления, то любой другой поток, желающий получить доступ к этому объекту, может получить к нему доступ и дать результаты в отношении многопоточности. Так что он быстрее по сравнению с атомарным атомное

Другие вопросы по тегам