Hi WT,

>> If I understand you correctly, what you're saying about your variable 
>> "__block SomeObjType foo" is not true. Regardless of the __block qualifier, 
>> foo is effectively a stack-based variable, so two simultaneously-executing 
>> threads have their own independent instance of that variable. There can be 
>> no "cross-talk" between the variables in separate threads - all you are 
>> doing is enabling the block that a given thread executes to have access to 
>> that specific thread's stack variable.
> 
> I'm afraid you're incorrect there. According to the documentation (or, more 
> precisely, my understanding of the documentation), a variable qualified with 
> __block starts in the stack but is moved to the heap, precisely because it's 
> shared by all blocks capturing it and by all function scopes where it's 
> declared. Therefore, I do not believe "two simultaneously-executing threads 
> have their own independent instance of that variable" to be true.

I tested this out before replying as I wasn't 100% certain. It may be that we 
have misunderstood each other somehow, but the following code (in a clean new 
project) was what I used to confirm to myself that two concurrently-executing 
threads have independent instances of the variable:
http://www.dur.ac.uk/j.m.taylor/block_test_code.m

>> However I don't think you should need to do this anyway. I would change your 
>> code to something like this:
>> 
>> - (SomeObjType) foo
>> {
>>  dispatch_sync(queue,
>>  ^{
>>      // Code in this block ensures bah is valid
>>      if (nil == bah)
>>      {
>>          // Code to compute and store bah goes here
>>      }
>>  });
>> 
>>  return bah;
>> }
> 
> I don't see how that could possibly work as is because bah is out of scope by 
> the time the return statement is executed. Perhaps you meant that bah is an 
> ivar or property declared in the same class as the accessor. I'm suddenly 
> drawing a blank here because I considered this before and came to the 
> conclusion that it wouldn't work but now I can't remember why I thought that 
> way. I need to think this through a bit more.
OK, well since you do not declare bah locally, and from what you are doing it 
is presumably meant to be persistent, I assumed that it was indeed a property 
(or a global?). If you are doing something else with it (though I'm not quite 
sure what...) then obviously what I wrote may be wrong...

Jonny_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to