如何在第一个函数运行时调用第二个函数,反之亦然?

时间:2016-10-19 20:38:19

标签: parallel-processing julia

我们说我有两个功能。一个功能需要一段时间才能处理,另一个功能很简单并且运行速度很快。我想同时启动它们,但是在循环中连续运行它,在第一个函数完成时结束。怎么能这样做?

## 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()

我相信我需要在这里建立一个并行流程,但我无法看到它应该如何工作。

1 个答案:

答案 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完成时)处理完毕后退出。