On Dec 7, 2012, at 8:01 PM, Steve Sisak wrote: > Here's what I usually do: > > assume that _someDictionary is an instance variable initialized to nil and > never changed once initialized to non-nil > > - (NSDictionary *)someDictionary; > { > if (!_someDictionary) > { > @synchronized (self) > { > if (!_someDictionary) > { > // create a temp dictionary (might take some time) > _someDictionary = temp; > } > } > } > > return _someDictionary; > } > > the outer if avoids the overhead of @synchronized if _someDictionary is > already created -- this is just an optimization > > the inner if is necessary to resolve the race condition if multiple threads > make it past the outer one
This is a classic anti-pattern called double-checked locking. It is not safe. Don't rely on it. https://en.wikipedia.org/wiki/Double-checked_locking http://erdani.com/publications/DDJ_Jul_Aug_2004_revised.pdf Regards, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com