LoginSignup
1
0

More than 5 years have passed since last update.

Swift 4でカジュアルにthread safeなハッシュを作る - How to create thread safe hash / array in Swift 4

Last updated at Posted at 2018-06-16

以下、実装です。
なお、Swiftはハイレベルなものからローレベルなものまで様々なマルチスレッド・プログラミングのためのAPIがあり、これが筋の良いものかはまだ未検証。

容易に想像がつくが、flags: .barrierがないとクラッシュする(検証済み)


class ThreadSafeHash<T: Hashable, S> {
    private var raw: [T: S]
    private let concurrentQueue = DispatchQueue(label: "ThreadSafeHashQueue", attributes: .concurrent)

    init(_ raw: [T: S]) {
        self.raw = raw
    }

    subscript(i: T) -> S? {
        get {
            var value: S?
            concurrentQueue.sync {
                value = raw[i]
            }
            return value
        }
        set {
            concurrentQueue.async(flags: .barrier) {
                self.raw[i] = newValue
            }
        }
    }
}

DispatchSemaphore, NSCache, objc_sync_enter, NSLock等との比較

  • TODO

苦情・まさかりはコチラ

twitter: _kentrino

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0