Swift的写时复制线程安全吗?

Is Swift's copy-on-write thread-safe?


根据定义使数组或字典成为值类型,但实际上只有当一个引用试图修改它时才复制它是一个可爱的想法,但它让我在多队列/线程上下文中保持警惕.我需要知道:

Swift的写时复制功能是否线程安全?例如: 如果我在一个队列上创建一个数组并将其传递给另一个队列,那么当另一个队列可能正在读取或修改它时,任何一个队列修改它是否安全?由于根据定义,副本是在将数组引用传递到第二个队列时生成的,我们能否假设Swift工程师做了正确的事情,并以队列安全的方式实现了写时复制?

我发现这个旧的讨论,这似乎是权威的,但在两个方向! https://developer.apple.com/forums/thread/53488

一些可信的声音说它是线程安全的,其他人说它不是.我想这可能是因为在Swift的一些早期版本中不是,而在Swift 5中可能是.这里有人肯定知道Swift 5吗?

下面是一些示例代码来说明这个问题:

func func1()
{
    var strings1: [String] = ["A", "B", "C"]
    var strings2: [String] = strings1   // array not actually copied
    queue.async()
    {
        strings2.append("D")
    }

    print(strings1[0])    // is this reference thread-safe?
    strings1.append("E")  // is this modification thread-safe?
}

.htaccess .net .net-core 2d 3d actions-on-google actionscript-3 activemq acumatica adobe-xd aframe ag-grid air airflow ajax akka alexa algorithm alignment allure amadeus amazon-cognito amazon-deequ amazon-dynamodb amazon-ec2 amazon-redshift amazon-s3 amazon-web-services amcharts amcharts4