首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileHandle.write线程安全吗?

FileHandle.write线程安全吗?
EN

Stack Overflow用户
提问于 2017-09-15 05:37:02
回答 1查看 226关注 0票数 0

我正在尝试调试我的应用程序中的一个难以捉摸的崩溃。在平安无事地运行了几分钟后,应用程序将停止并显示Message from debugger: terminated due to memory issue。没有堆栈跟踪。

我已经确定崩溃与将字节复制到UInt8数组中的一段代码有关。可以在紧接之前或之后将相同的数组写入文件系统。我从悲哀的经历中了解到,你不能从不同的线程向同一数组读写数据。它会导致系统崩溃,就像我现在经历的那样。但我在实现时非常小心。将字节写入数组的代码和从数组读取字节的代码都运行在相同的串行DispatchQueue上。

但也许还有另一个线索呢?写操作是否真的在FileHandle.write返回之前完成,或者是否有一些后台处理?

代码语言:javascript
复制
func bug() {
    let bufferSize = ...
    var fileHandle:FileHandle = ...
    var fileIndex:UInt64 = ...

    var bytes = [UInt8](repeating:0, count:bufferSize)

    fileHandle.seek(toFileOffset: fileIndex)
    fileHandle.write(Data(bytes))
    for pos in 0..<bufferSize {
        bytes[pos] = ...        // Can my app crash here?
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-09-15 23:19:34

FileHandle.write不应该创建另一个线程。我认为“来自调试器的消息:由于内存问题而终止”错误的最可能的解释是,由于某种原因,你的应用程序正在耗尽内存。可能有什么东西没有正确释放。

你是否在一个循环中分配多个UInt8字节数组?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46228602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档