Hi,

I was confused by this:

> It also doesn't make sense to synchronize on the myDict object.  That's what 
> is in flux.  You should synchronize on "self", the object which owns and 
> manages myDict. 

Surely as long as every access to the dictionary is @synchronized to the same 
entity it’s fine?

The way I’d atcheive this is to make the NSMutableDictionary a private property:

@property (nonatomic,strong)    NSMutableDictionary*      pDictX;

 and define public methods:

-(void) removeObjectFromDictXWithKey:(NSString*) theKey;
-(void) addObject:(id) theObject toDictXWithKey:(NSString*) theKey;
-(id) getObectFromDictXWithKey:(NSString*) theKey;

The body of these methods would encapsulated with @synchronized :

 @synchronized (self. pDictX)
     {

// Code to Access self.pDictX

     }

If you wanted two dictionaries to work in this pay, just define another set for 
pDictY, etc.

Surely if you  do @synchronized(self) then access to pDictX will be blocked 
needlessly by access to pDictY?

Cheers
Dave

On 1 Apr 2014, at 14:45, Trygve Inda <cocoa...@xericdesign.com> wrote:

>> On Apr 1, 2014, at 12:25 AM, Jens Alfke wrote:
>> 
>>> On Mar 31, 2014, at 10:16 PM, Trygve Inda <cocoa...@xericdesign.com> wrote:
>>> 
>>>> I need to be able to set a new myDict and not have it happen between the
>>>> reading of different values from the dictionary by other threads.
>>> 
>>> Don’t expose the dictionary in mutable form. You can’t make that thread-safe
>>> unless all the clients voluntarily agree to do something like wrap their
>>> usage with @synchronized blocks using the dictionary as a parameter.
>> 
>> I didn't see mention of mutating the dictionary.  It sounds like he's just
>> using a setter to replace it (which also likely releases it, which makes it
>> potentially unsafe).
>> 
>> I agree, though, that properties should almost never be of mutable type.  But
>> making them immutable doesn't, by itself, create thread-safety.  If nothing
>> else, the owner could still mutate it while other threads are reading it.
>> 
>> Regards,
>> Ken
>> 
>> 
> Yes, the property is Mutable in the host app, but after being sent to the
> helper app (which has multiple threads), it could just as easily be an
> NSDictioanary (non-mutable).
> 
> I just need to be 100% certain that when the helper app threads read two
> values from the dictionary, that the dictionary does not change between (or
> during) these two reads.
> 
> T.
> 
> 
> 
> 
> 
> _______________________________________________
> 
> 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/dave%40looktowindward.com
> 
> This email sent to d...@looktowindward.com


_______________________________________________

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

Reply via email to