linux - Swift objc_sync_enter/exit Linux 替代品

标签 linux swift

对于 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/

相关文章:

swift - 如何使用 CNPostalAddress 创建 CNContact?

linux - 同一个文件是否可能存在于多个目录中?

linux - XMonad:按下生成键时具有焦点的 SpawnOn 工作区

java - 虚拟内存每秒增加 - 内存不足错误

c++ - PCduino - NFC/RFID HSU

swift - 从 ViewController 传递数据

swift - iOS11中有没有办法指定UIContextualAction的宽度?

linux - 无法回显 "for loop"内的变量值

ios - Swift:我的委托(delegate)协议(protocol)方法需要在另一个 View Controller 上执行

ios - CGContext 的背景图片