Re: Accessing array in thread safe way
Re: Accessing array in thread safe way
- Subject: Re: Accessing array in thread safe way
- From: CoGe - Tamas Nagy <email@hidden>
- Date: Fri, 09 Mar 2012 09:30:40 +0100
On Mar 8, 2012, at 11:57 PM, Quincey Morris wrote:
> On Mar 8, 2012, at 14:29 , Charles Srstka wrote:
>
>> For those two examples, it seems like having the default accessor return an immutable array via copy would solve the issue.
>
> It wouldn't solve, e.g., the possibly inconsistency between 'array.count' and a subsequent reference, unless it was coded to keep a "consistent" local reference to the copy of the array, in which case you'd want the copy to be explicit in the API so that a reader of the code would be aware, and that would be a non-atomic-level approach anyway.
>
> I also wanted to point out that there's another defect in Tamas's code: it needs an explicit atomic 'copy' implementation, and therefore an explicit atomic 'mutableCopy' implementation. And who knows what else …
>
> I'm begging ya to forgeddaboudit. The atomicity solution is a fantasy**. You can't solve thread safety at that level.
>
>
>
> ** However, we don't know the scenario Tamas wrote the code for. It's possible atomicity solved whatever issue he was facing, that wasn't general thread safety. It's also possible he didn't solve anything, but just changed a likely-to-cause-a-crash bug into a impossible-to-crash-but-likely-to-cause-a-rare-and-subtle-but-almost-impossible-to-debug-error bug.
>
Thanks Quiencey to pointing this out, however, what you suggest instead of the current implementation? What I use for this class is putting and/or update objects into it from different threads, then access it from an other (reader) thread (via objectAtIndex: and by enumarating).
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden