objective c - Why atomic is not sufficient in thread safety for complex objects -


atomic keyword applied properties of class, thread safety.

usage of atomic thread safe primitive data types not complex objects (modal objects). why ?

thanks in advance kind reply!

update

if person class having properties name, age, address.

consider

@property(atomic, strong) person *adam;

how far object adam thread safe ?

this dupe of what's difference between atomic , nonatomic attributes? prior edit, though wasn't obvious.

since answer referred often, added following underscore thread safety having kind of transactional model reads , writes controlled such system in known, integral, state when read or write happens.

atomicity of single property cannot guarantee thread safety when multiple dependent properties in play.

consider:

 @property(atomic, copy) nsstring *firstname;  @property(atomic, copy) nsstring *lastname;  @property(readonly, atomic, copy) nsstring *fullname; 

in case, thread renaming object calling setfirstname: , calling setlastname:. in meantime, thread b may call fullname in between thread a's 2 calls , receive new first name coupled old last name.

to address this, need transactional model. i.e. other kind of synchronization and/or exclusion allows 1 exclude access fullname while dependent properties being updated.


Comments

Popular posts from this blog

javascript - Clear button on addentry page doesn't work -

c# - Selenium Authentication Popup preventing driver close or quit -

tensorflow when input_data MNIST_data , zlib.error: Error -3 while decompressing: invalid block type -