ペアで呼び出される 2 つのタスクがあります。それらは個別のブロッキング I/O リソースと対話するため、個別のタスクであり、それらの 1 つ (TaskA) は、タスク ペアの前のインスタンスがまだ実行されているという条件で早期に終了しますが、TaskB は引き続き実行されます (つまり、TaskA はオーバーラップを考慮します)。タスク ペア、TaskB はありません)。
現在、クックブックの例に従ってキャッシュされたトークンを使用して、レイアウトされたルールを適用することを検討しています
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 はそれを使用して、rand 部分がそれ自体と一致する場合は 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 番目のバージョン (rand() を追加) で提案した方法でトークンを使用して、タスクを調整する正しい方法ですか? または、もっと簡単な方法があります。
問題が明確でない場合、またはタスクにこの操作基準がある理由について好奇心に燃えている場合は、さらに情報を追加できます。