gpt4 book ai didi

swift - 使用 dispatch_async 进行并行搜索

转载 作者:搜寻专家 更新时间:2023-11-01 05:38:48 26 4
gpt4 key购买 nike

我正在尝试实现并行搜索算法。这个概念是这样的:

  1. 从候选人开始并测试它是否是所需的值
  2. 如果没有,生成更多候选人并将他们添加到队列中。
  3. 重复直到达到想要的值

作为一个简化示例:我想在 0..<n 范围内运行一个随机数生成器直到它给我 0。我想减少 n每次迭代都会保证成功。到目前为止,这是我的代码:

let queue = dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)
let work : dispatch_function_t = { arg in
let upper = UnsafeMutablePointer<UInt32>(arg).memory
let random = arc4random_uniform(upper)
if random == 0 {
// do things
} else {
dispatch_async_f(queue, &(upper - 1), work)
// Error: Variable used within its own initial value
}
}

dispatch_async_f(queue, &1000, work)
// Error: '&' used for non inout argument of type 'UnsafeMutablePointer<Void>'

我有两个错误:

Variable used within its own initial value
'&' used for noninout argument of type 'UnsafeMutablePointer<Void>'

我该如何修复它们?非常感谢!

最佳答案

声明和初始化分两步解决“在其自身初始值内使用”的问题。

let work: dispatch_function_t
work = { arg in
let upper = UnsafeMutablePointer<UInt32>(arg).memory
let random = arc4random_uniform(upper)
if random == 0 {
// do things
} else {
dispatch_async_f(queue, &(upper - 1), work)
// Error: Variable used within its own initial value
}
}

你可以像这样修复另一个。

var n = 1000
dispatch_async_f(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), &n, work)

关于swift - 使用 dispatch_async 进行并行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com