> On Dec 5, 2017, at 6:24 AM, Michel Fortin via swift-users
> <swift-users@swift.org> wrote:
>
> The array *storage* is copy on write. The array variable (which essentially
> contains a pointer to the storage) is not copy on write. If you refer to the
> same array variable from multiple threads, you have a race. Rather, use a
> different copy of the variable to each thread. Copied variables will share
> the same storage but will make a copy of the storage when writing to it.
I think you’ve misunderstood. The race condition Romain is referring to is when
the two threads both access the shared storage, through separate array
variables.
Romain:
>From the thread sanitizer warnings, it sounds like the implementation of Array
>is not using synchronization around its call(s) to isKnownUniquelyReferenced …
>which would mean the class is not thread-safe.
It’s pretty common for the regular (mutable) collection classes supplied by a
framework to be non-thread-safe; for example consider Foundation and Java. The
reason is that the overhead of taking a lock every time you access an array
element is pretty high. Generally it’s preferable to use larger-granularity
locks, i.e. grab an external lock before performing a number of array
operations.
—Jens
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users