[swift-users] dispatch concurrent map: is this right?
Karl
razielim at gmail.com
Sun Oct 30 03:15:19 CDT 2016
I had the need for a concurrent map recently. I had a part of a program which needed to read chunks of data and concurrently process them and assemble the results in an array. This isn’t necessarily as obvious as it sounds, because of arrays being value types. I came up with the following snippet which I’d like to check for correctness; it could also be helpful to others.
Perhaps this is something Dispatch should provide out-of-the-box?
- Karl
extension DispatchQueue {
static func concurrentMap<T>(iterations: Int, execute block: (Int) -> T) -> [T] {
var result = Array<T>()
result.reserveCapacity(iterations)
result.withUnsafeMutableBufferPointer { (results: inout UnsafeMutableBufferPointer<T>) in
concurrentPerform(iterations: iterations) { idx in
results[idx] = block(idx)
}
}
return result
}
}
extension Array {
func concurrentMap<T>(execute block: (Element)->T) -> [T] {
return DispatchQueue.concurrentMap(iterations: count) { block(self[$0]) }
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161030/7ead995a/attachment.html>
More information about the swift-users
mailing list