> 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

Reply via email to