> 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]

Reply via email to