私はペアで呼び出される2つのタスクを持っています。それらは別々のI/Oリソースをブロックするために別々のタスクであり、そのうちの1つ(TaskA)は、TaskBがまだ実行されている間にタスクペアの以前のインスタンスがまだ実行されているという条件で早期に終了します(TaskAは、タスクペア、TaskBはありません)。2つのセロリのタスクを調整する
は、今私がレイアウトされたルールを適用するために料理の一例に従って、キャッシュされたトークンを使用してで探しています
def TaskA()
take TaskA token
exit if already taken
check if TaskB token is taken
exit if TaskB token is taken
continue working
def TaskB()
take TaskB token
if token taken exit
do task
この通報はTaskAとTaskB対の内、TaskBは、最初TaskAを開始した場合ということです誤って終了します。私がTaskAが常に最初に始まるように強制することができれば、おそらくこれをやるのはいい方法かもしれません。
それ以外の場合: これは両方のタスクインスタンスに渡す呼び出し関数でrand()またはタイムスタンプを生成することでした。 TaskBインスタンスはトークンにトークンを追加し、TaskAトークンを使用してTaskBトークンを無視し、トークンが取得されてもrand部分が一致しない場合は終了します。レイアウトの問題を考えると
def TaskA(rand)
take TaskA token
exit if already taken
check if TaskB_* token is taken
exit if TaskB_not_rand token is taken
continue working
def TaskB(rand)
check TaskB_* token
if TaskB_* token taken exit
take TaskB_rand token
do task
は、私は2番目のバージョンで提案した方法(ランドと()追加)に調整するためにタスクを取得するための正しい方法をトークンを使用していますか?または、より簡単な方法があります。
問題が明確でない場合、またはタスクがこの操作基準を持つ理由について好奇心で燃えている場合は、さらに情報を追加できます。
。 – michael