2016-10-19 10 views
4

私は2つの機能を持っているとしましょう。 1つの関数は処理に時間がかかり、もう1つはシンプルで素早く実行されます。私はそれらを同時に起動したいが、最初の関数が完了したときに終了するループで連続して実行する単純なものを持っている。どのようにこれを行うことができますか?最初の関数が実行されているときに2番目の関数を呼び出す方法、またはその逆の方法は?

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

私はここで並列プロセスを設定する必要があると信じていますが、どのように動作するのかわかりません。ここ

答えて

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 

よりコンパクトな実装が可能であるが、主なアイデアは、単純である - と呼ばれることもある(グローバル変数を使用mutex)。注釈call_bothは、function_twoの少しのビット(function_oneが完了したとき)が処理を終了した後にのみ終了します。

関連する問題