同时访问<地址>,但修改需要独占访问

Posted

技术标签:

【中文标题】同时访问<地址>,但修改需要独占访问【英文标题】:Simultaneous accesses to <Address>, but modification requires exclusive access 【发布时间】:2019-05-06 13:26:40 【问题描述】:

我想在函数myFunc 中指定用于操作的数组属性,但出现此错误。这是我的代码草图。

self.data = MyObject()

func myFunc(x: inout [Int], y: inout [[Int]]) 
    //manipulation code to x and y


myFunc(x: &self.data.array1, y: &self.data.array2)
myFunc(x: &self.data.array3, y: &self.data.array4)

知道如何让它工作吗?我应该为这个用例使用更好的模式吗?谢谢提前!

【问题讨论】:

什么是self,什么是data? data 是自定义类的实例 【参考方案1】:

在 Swift 文档中进行了非常详尽的解释:

https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html

基本上,您威胁要同时以两种不同的方式对同一个对象进行变异/写入。这是不连贯的,如果编译器不阻止你,运行时就会阻止。

【讨论】:

问题可能是 Swift 不能确定这些不是同一个数组。 那么如何实现这个用例呢? 不要使用 inout。 所以我的错误是:我将 inout 与类实例一起使用。我很快就遇到了这个问题:链表反转按大小为 k 的组。

以上是关于同时访问<地址>,但修改需要独占访问的主要内容,如果未能解决你的问题,请参考以下文章

交换数组元素显示错误:同时访问但修改需要独占访问

同时访问0x6040000155d8,但修改需要独占访问

同时访问0x10f10df48,但修改需要独占访问

线程5:同时访问0x10b883638,但修改需要独占访问

SwiftUI/CoreData:同时访问0x7f92efc61cb8,但修改需要独占访问

Confluence 6 配置服务器基础地址备注