> On Apr 26, 2017, at 6:58 PM, Jonathan Schleifer <[email protected]> > wrote: > >> The lock is necessary because atomic properties promise that concurrent >> reads and writes will yield consistent values without crashing. > > Meaning you need to atomically read and write a pointer. Which all modern > architectures do. Or what am I missing here?
The object can be released, making the pointer invalid. Imagine a read that's concurrent with a store, when the property holds the only reference to the object. You can actually do stores safely with an atomic exchange, but you cannot do a load without something equivalent to a spin lock that can be held for the duration of the retain. John. > > If you have void *foo and set it in thread A while reading it in thread B, > nothing bad will happen on all modern architectures: The write can only be > completed atomically, it's impossible to only write half the bytes. So what's > the purpose, other than for machines where this is not the case (I cannot > think of one where it's not)? > >> That is the primary semantic guarantee of atomic properties. If you believe >> that that guarantee is pointless, you are arguing for the use of nonatomic >> properties. > > I'd be arguing for nonatomic if it does not skip the retain and release, but > unfortunately, it does. > >> Whether or not a property getter autoreleases its return value is unrelated >> to atomic properties except inasmuch as an atomic property getter must >> retain its current value in order to satisfy its semantic guarantee, and >> that retain has to be balanced somehow. When an atomic property can satisfy >> its semantic guarantee without retaining — for example, if it has a >> guarantee that the value is retained elsewhere, e.g. as an >> __unsafe_unretained property does — then the getter does not need to >> autorelease the result. > > Has that always been the case? Looking into Foundation, it seems that > objc_getProperty isn't used much, but instead the you have the [[iVar retain] > autorelease] pattern all over the place. If that were always the case, why > the retain and autorelease there then instead of just return? > > -- > Jonathan _______________________________________________ Do not post admin requests to the list. They will be ignored. Objc-language mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/objc-language/archive%40mail-archive.com This email sent to [email protected]
