On 19 Apr 2022, at 18:47, Saagar Jha wrote:

If Thread Sanitizer says your code has a race, it almost certainly has a race.

Yeah, that's been my general experience until now.

Your simple code seems OK superficially, but there are a couple things that could be problematic here: either your real code is actually mutating something, or (unlikely) you are touching some internal state, perhaps a CoW optimization, that is not visible to you but is silently changing things under the hood.

In case it wasn't clear, the code snippet in my email actually reproduces the issue. I created a fresh Xcode project and it's literally just:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        NSArray* array = @[@5, @6, @7, @8, @9, @10, @11];
        
[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSNumber* num, NSUInteger idx, BOOL* stop) {
                array[idx];
        }];
}       

TSan complains with this on macOS 12.3.1 on an M1 Mac Mini with Xcode 13.3. But on an Intel Mac Pro, macOS 11.6.6 with Xcode 13.2.1, TSan does not complain.

In any case, I would generally suggest using -[NSArray enumerateObjectsAtIndexes:options:usingBlock:] with the NSEnumerationConcurrent flag, which should rule out any issues with concurrent access on the array itself.

I tried enumerateObjectsWithOptions:usingBlock: and TSan doesn't complain with it. But I was suspicious of that and added an NSLog to print the index, and even after adding random sleeps:

[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSNumber* nub, NSUInteger idx, BOOL* stop) {
                usleep(arc4random_uniform(1000000));
                NSLog(@"idx: %d", idx);
                array[idx];
        }];

The thing is *not* running concurrently on the M1. The indices are always printed in order. Weird.

Sean
_______________________________________________

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