> On Jan 8, 2018, at 5:20 PM, Chris Lattner <clatt...@nondot.org> wrote: > >> On Jan 8, 2018, at 2:59 PM, Greg Parker via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >>> On Jan 8, 2018, at 12:51 PM, Jordan Rose via swift-users >>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>> >>>> On Jan 8, 2018, at 11:47, Fadi Botros <botros_f...@yahoo.com >>>> <mailto:botros_f...@yahoo.com>> wrote: >>>> >>>> 1st: How to invoke the thread sanitizer? >>> >>> Check out this article on developer.apple.com >>> <http://developer.apple.com/>: >>> https://developer.apple.com/documentation/code_diagnostics/thread_sanitizer/enabling_the_thread_sanitizer >>> >>> <https://developer.apple.com/documentation/code_diagnostics/thread_sanitizer/enabling_the_thread_sanitizer> >>>> 2nd: I think making something like ConcurrentModificationException of Java >>>> should be a little better experience (if it will not make, or make a small >>>> performance penalty, also if it makes performance penalty, it would be >>>> activated only when you make a debug version or non-optimized version) >>> >>> I don't exactly disagree, but my understanding is that the work to do such >>> a thing is nearly equivalent to having thread sanitizer on all the time. >>> But maybe there's a simpler model that we could still turn on in debug >>> builds. Can you file a bug report requesting this now that bugs.swift.org >>> <http://bugs.swift.org/> is back up? >> >> Something like ConcurrentModificationException ought to be cheaper than the >> thread sanitizer. The thread sanitizer works hard to detect every >> concurrency error. ConcurrentModificationException typically does something >> simple and cheap that catches errors sometimes but makes no attempt to be >> exhaustive. >> >> Objective-C's fast enumeration protocol includes a mechanism like this. The >> collection can have a simple mutation counter, and the enumerator captures >> the counter's value at the start and checks that the value is unchanged as >> the enumeration proceeds. > > Does ObjC synchronize the mutation counter? My understanding is that that > counter was used to detect mutation while iteration on a single thread, not > across threads.
The mutation counter is not synchronized; this is safe for correct code. An un-synchronized counter can still sometimes catch mutations from other threads. -- Greg Parker gpar...@apple.com <mailto:gpar...@apple.com> Runtime Wrangler
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users