gpt4 book ai didi

linux - Swift objc_sync_enter/exit Linux 替代品

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:41 26 4
gpt4 key购买 nike

对于 Swift 中的多线程并发编辑对象,我使用:

import Foundation
func lockForEdit(object: NSObject, closure: () -> Void) {
objc_sync_enter(object)
closure()
objc_sync_exit(object)
}

// In each thread
lockForEdit (object: threadsDictionarie as NSObject) {
threadsDictionarie.append(dict)
}

但是在 Linux Ubuntu 14.04Swift 3.0.1 我得到:

使用未解析器标识符“objc_sync_enter”,使用未解析器标识符“objc_sync_exit”

Linux 中的 Swift 使用什么来并发编辑对象?

最佳答案

Swift 中没有针对每个对象的锁定。您可以使用 NSLock 或 pthread 锁作为替代,但您需要自行维护锁/对象映射。

此外,您可能希望首先使用串行 DispatchQueue 而不是锁( checkout :About Dispatch Queues)。但这显然取决于您在做什么。

一种方法是添加类似ThreadsafeDictionary 的内容,并将真正的字典包装在其中。像这样:

class ThreadsafeDictionary<T> : ... all the protocols... {
let lock = NSLock()
var values = Dictionary<T>()
... all the methods you need ...
}

大概您可以在 GitHub 上找到它的实现。

关于linux - Swift objc_sync_enter/exit Linux 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com