Итак, у этой странной / бесполезной структуры есть имя, и есть ли у нее какое-либо применение?
Я использовал нечто подобное при моделировании многопроцессорных систем.
В планировщике процессов, реализованных как конечные автоматы, каждый процесс ожидает внешнего события, активного или завершенного. Планировщик имеет массив указателей на процессы.
Первоначально каждый процесс активен, и у планировщика есть индекс последнего ожидающего и первого завершенного процесса, изначально ноль и длина массива.
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
Это похоже на то, что он использует подкачку для удаления элементов из коллекции, но скорее удаляет элементы с обоих концов и оставляет «коллекцию» посередине.