如何在Swift中原子地增加一个变量?
我想能够以原子方式增加一个计数器,我找不到任何关于如何做的参考.
根据评论添加更多信息: 你使用GCD吗?不,我没有使用GDC.不必使用队列系统增加一个数字似乎是过度的. 我想做这样的事情: class Counter { private var mux Mutex private (set) value Int func increment (){ mux.lock() value += 1 mux.unlock() } }
从
Low-Level Concurrency APIs:
这些功能可以使用固定大小的整数,您可以选择 class Counter { private (set) var value : Int32 = 0 func increment () { OSAtomicIncrement32(&value) } } (注:由于Erik Aigner正确注意到,OSAtomicIncrement32和 或者,可以使用GCD队列进行同步.
在你的情况下会是 // Swift 2: class Counter { private var queue = dispatch_queue_create("your.queue.identifier",DISPATCH_QUEUE_SERIAL) private (set) var value: Int = 0 func increment() { dispatch_sync(queue) { value += 1 } } } // Swift 3: class Counter { private var queue = DispatchQueue(label: "your.queue.identifier") private (set) var value: Int = 0 func increment() { queue.sync { value += 1 } } } 有关更复杂的例子,请参见Adding items to Swift array across multiple threads causing issues (because arrays aren’t thread safe) – how do I get around that?或GCD with static functions of a struct.这个线程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |