В чем разница между атомарными и неатомарными атрибутами?

Просто добавленный ignore: [] на конкретную страницу для конкретной формы, это решение сработало для меня.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
1803
задан Chirag Kothiya 2 June 2018 в 15:14
поделиться

4 ответа

Последние два идентичны; "атомарный" поведение по умолчанию (<забастовка> примечание, что это не на самом деле ключевое слово; это определяется только отсутствием nonatomic - atomic была добавлена как ключевое слово в последних версиях llvm/clang).

Предположение, что Вы - @synthesizing реализации метода, атомарные по сравнению с неатомарными изменениями сгенерированный код. Если Вы пишете, что Ваш собственный метод set/методы get, атомарная/неатомарная/сохранять/присваивать/копия, являются просто консультативными. (Отметьте: @synthesize является теперь поведением по умолчанию в последних версиях LLVM. Нет также никакой потребности объявить переменные экземпляра; они будут синтезироваться автоматически также и будут иметь _ предварительно ожидаемый к их имени для предотвращения случайного прямого доступа).

С "атомарным", синтезируемый метод set/метод get гарантирует, что целый значение всегда возвращается от метода get или набора методом set, независимо от действия метода set по любому другому потоку. Таким образом, если поток A будет посреди метода get, в то время как поток B называет метод set, фактическое жизнеспособное значение - автовыпущенный объект, скорее всего - будет возвращен вызывающей стороне в A.

В nonatomic, никакие такие гарантии не сделаны. Таким образом, nonatomic значительно быстрее, чем "атомарный".

, Что "атомарный" делает не , делают, делают любые гарантии о потокобезопасности. Если поток A звонит методу get одновременно с потоком B и C вызов метода set с различными значениями, поток A может получить любое из трех возвращенных значений - тот до любых называемых методов set или любое из значений передал в методы set в B и C. Аналогично, объект может закончиться со значением от B или C, никакого способа сказать.

Удостоверяющаяся целостность данных - одна из основных проблем многопоточного программирования - достигается другими средствами.

Добавление к этому:

atomicity из единственного свойства также не может гарантировать потокобезопасность, когда несколько зависимых свойств находятся в игре.

Рассмотрите:

 @property(atomic, copy) NSString *firstName;
 @property(atomic, copy) NSString *lastName;
 @property(readonly, atomic, copy) NSString *fullName;

В этом случае, распараллельте A, мог переименовывать объект путем вызова setFirstName: и затем вызова setLastName:. Тем временем поток B может звонить fullName промежуточный поток A два вызова и получит новое имя вместе со старой фамилией.

Для обращения к этому Вам нужно транзакционная модель . Т.е. некоторый другой вид синхронизации и/или исключения, которое позволяет исключать доступ к [1 110], в то время как зависимые свойства обновляются.

1741
ответ дан bbum 3 June 2018 в 01:14
поделиться

Атомарный:

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

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

-(void) setName:(NSString*)string
{
  if (name)
  {
    [name release]; 
    // what happens if the second thread jumps in now !?
    // name may be deleted, but our 'name' variable is still set!
    name = nil;
  }

  ...
}

Профессионалы: Возврат полностью инициализированных объектов каждый раз делает его лучше всего выбором в случае многопоточности.

Недостатки: хит Производительности, делает выполнение немного медленнее

Неатомарным:

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

Профессионалы: Чрезвычайно быстрое выполнение.

Недостатки: Возможности мусора оценивают в случае многопоточности.

54
ответ дан Sam92 3 June 2018 в 01:14
поделиться
  • 1
    отредактированный мой ответ, проверьте, работает ли это. – Daniel Moura 20 August 2009 в 20:14

Это объяснено в документации Apple , но ниже некоторые примеры того, что на самом деле происходит.

<забастовка> Примечание, что нет никакого "атомарного" ключевого слова, если Вы не определяете "неатомарный", тогда свойство является атомарным, но определение "атомарного" явно приведет к ошибке.

, Если Вы не определяете "неатомарный", тогда свойство, является атомарным, но можно все еще определить "атомарный" явно в последних версиях, если Вы хотите.

//@property(nonatomic, retain) UITextField *userName;
//Generates roughly

- (UITextField *) userName {
    return userName;
}

- (void) setUserName:(UITextField *)userName_ {
    [userName_ retain];
    [userName release];
    userName = userName_;
}

Теперь, атомарный вариант немного более сложен:

//@property(retain) UITextField *userName;
//Generates roughly

- (UITextField *) userName {
    UITextField *retval = nil;
    @synchronized(self) {
        retval = [[userName retain] autorelease];
    }
    return retval;
}

- (void) setUserName:(UITextField *)userName_ {
    @synchronized(self) {
      [userName_ retain];
      [userName release];
      userName = userName_;
    }
}

В основном, атомарная версия должна взять блокировку, чтобы гарантировать потокобезопасность и также наталкивается касательно, рассчитывают на объект (и количество автовыпуска для балансировки его) так, чтобы объект, как гарантировали, будет существовать для вызывающей стороны, иначе существует потенциальное состояние состязания, если другой поток устанавливает значение, заставляя касательно количества спадать 0.

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

356
ответ дан Iulian Onofrei 3 June 2018 в 01:14
поделиться
  • 1
    Спасибо за добавление этого ответа, хотя вопросу несколько лет. Это помогло мне! =) – Will Marcouiller 11 February 2013 в 22:20

Самый легкий ответ сначала: нет никакого различия между Вашими вторыми двумя примерами. По умолчанию средства доступа свойства являются атомарными.

Атомарные средства доступа в не собрали "мусор" среда (т.е. когда использование сохраняет/выпускает/автовыпускает), будет использовать блокировку, чтобы гарантировать, что другой поток не вмешивается в корректную установку/получение значения.

Посмотрите" Производительность и Поточная обработка " раздел Objective C Apple 2,0 документации еще для некоторой информации и для других соображений при создании многопоточных приложений.

52
ответ дан Parag Bafna 3 June 2018 в 01:14
поделиться
  • 1
    Да. Это doesn' t работа, I' ve попробованный, использующий Firebug также. That' s, почему я отправил;-) – Rio 20 August 2009 в 20:10