对于 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.04
和 Swift 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/