我们说我有两个功能。一个功能需要一段时间才能处理,另一个功能很简单并且运行速度很快。我想同时启动它们,但是在循环中连续运行它,在第一个函数完成时结束。怎么能这样做?
## It will take a while to write out ##
function function_one()
writedlm(big_array, "/very/large/file.csv")
end
## trival function ##
function function_two()
return 5
end
## I want to run something like this: ##
function call_both()
while function_one()
function_two()
end
end
call_both()
我相信我需要在这里建立一个并行流程,但我无法看到它应该如何工作。
答案 0 :(得分:3)
这是一个使用全局(但类型推断为const)变量的可能解决方案:
const done_function_one = Ref{Bool}(false)
function call_both()
done_function_one[] = false
@sync begin
@async begin
function_one()
done_function_one[] = true
end
@async begin
while !done_function_one[]
function_two()
end
end
end
end
更紧凑的实现是可能的,但主要思想很简单 - 使用全局变量(有时称为互斥)。注意call_both
仅在剩余的function_two
(当function_one
完成时)处理完毕后退出。