この奇妙な/役に立たない構造は名前を持っていますか?
私は、マルチプロセスシステムのシミュレーションで同様のことを使用しました。
ステートマシンとして実装されたプロセスのスケジューラでは、各プロセスが外部イベント、アクティブまたは完了を待機しています。スケジューラーには、プロセスへのポインターの配列があります。
最初は各プロセスがアクティブであり、スケジューラは最後に待機して最初に完了したプロセスのインデックスを持ち、最初は0であり、配列の長さです。
V-- waiting
[ A-active, B-active, C-active, D-active ]
completed --^
^- run
スケジューラは、プロセスを次の状態にするために、アレイを繰り返し処理し、各プロセスを順番に実行します。プロセスが待機中であると報告した場合は、アレイ内の最後の待機プロセスの後にプロセスと交換されます。
V-- waiting
[ A-waiting, B-active, C-active, D-active ]
completed --^
^- run
完了したと報告された場合は、最初に完了した配列の前のプロセスと交換されます。だから、アクティブから待機中または完了にスケジューラが実行され、プロセスの遷移として、配列が最後に開始時に待機中のすべてのプロセス、途中ですべてのアクティブなもの、そして完成したものと一緒に注文なっ
V-- waiting
[ A-waiting, D-active, C-active, B-completed ]
completed --^
^- run
。もはやアクティブなプロセスが存在する場合
V-- waiting
[ A-waiting, C-waiting, D-active, B-completed ]
completed --^
^- run
反復の特定の番号のいずれかの後、又は、完了したプロセスは、アレイの外に洗浄され、外部のイベントが処理される:
V-- waiting
[ A-waiting, C-waiting, D-completed, B-completed ]
completed --^
^- run == completed so stop
これはに類似していますスワップを使ってコレクションからアイテムを削除していますが、両端からアイテムを削除して、コレクションの中央に残しています。
通常(IMO)、ランダムアクセスが必要な場合は、注文が必要です。しかし、非常に興味深い考えです。 –