职能:
public func OSAtomicCompareAndSwapPtr(_ __oldValue: UnsafeMutableRawPointer!, _ __newValue: UnsafeMutableRawPointer!, ___theValue: UnsafeMutablePointer<UnsafeMutableRawPointer?>!) -> Bool需要a参数UnsafeMutablePointer<UnsafeMutableRawPointer?>的类型theValue,但是我很难从类型UnsafeMutablePointer<T?>中找到一个
对我怎么做有什么想法吗?
编辑:
出于对我为什么要这样做的好奇,我尝试创建一个通用的包装器,以便像这个博客帖子中所概述的那样,快速地创建一个有限的MPMC队列。到目前为止,这是我的包装
func compareAndSwap<T: AnyObject>(current: T?, future: T?, toPtr: UnsafeMutablePointer<T?>) -> Bool {
let currentPtr = current.map(Unmanaged.passUnretained)?.toOpaque()
let futurePtr = future.map(Unmanaged.passRetained)?.toOpaque()
if OSAtomicCompareAndSwapPtr(currentPtr, futurePtr, ????) {
return true
}
return false发布于 2017-03-03 18:35:08
在Swift 3中,.withMemoryRebound重新解释"T**“指针到"void**”指针:
return toPtr.withMemoryRebound(to: (UnsafeMutableRawPointer?).self, capacity: 1) {
OSAtomicCompareAndSwapPtr(currentPtr, futurePtr, $0)
}请注意,
atomic_compare_and_exchange_strong,它是不幸的是你不能在Swift中使用。我是一个已知的问题。还有一个timehop/Atomics,它为您隐藏了所有危险的类型(但是,它不是通用的)。
var toPtr = HOPAtomicReference(object: ...)
...
return toPtr.compareTo(current, andSetObject: future)https://stackoverflow.com/questions/42585231
复制相似问题