[swift-users] Simultaneous access to global tuple members

Martin R martinr448 at gmail.com
Fri Aug 11 10:18:35 CDT 2017


Thank you for the clarification.

> On 8. Aug 2017, at 18:39, Guillaume Lessard <glessard at tffenterprises.com> wrote:
> 
> 
>> On Aug 8, 2017, at 09:10, Martin R <martinr448 at gmail.com> wrote:
>> 
>> In that example the tuple is a (stored) property of a class, not a global variable. And why does it crash for a global variable, but not for a local variable in a function?
> 
> In the case of a local variable in a function, the compiler can statically prove that there is no simultaneous access, and using `swap` is allowed. With a global variable, the compiler can’t statically prove exclusive access.
> (it seems silly with your simple example, but the system doesn’t try static enforcement with global variables.)
> 
> Here’s another modification which traps at runtime:
> 
> ***
> import Dispatch
> 
> func foo()  {
>  var tuple = (1, 2)
> 
>  let q = DispatchQueue(label: "queue")
>  q.async { swap(&tuple.0, &tuple.1) }
>  q.sync {}
> 
>  print(tuple)
> }
> 
> foo()
> ***
> 
> Guillaume Lessard
> 



More information about the swift-users mailing list