Имеются сервер и клиент, причём, на сервере может работать несколько клиентов одновременно. Функции клиента - загружать с сервера списки определённых структур данных и работать с ними. Всего поддерживается 4 операции: обновить список, добавить элемент, удалить и изменить существующий. Сервер абсолютно пассивен, т.е. не уведомляет одного клиента об изменениях, сделанных другими.
Данные устроены так, что структуры из одних списков ссылаются на структуры из других. Т.е. между ними есть зависимости. При этом хочется, чтобы, в коде, имея экземпляр структуры B, ссылающейся на экземпляр A, можно было бы получить из первого именно экземпляр второго, а не имя, ID или что-то такое. То есть, возникает задача разрешения зависимостей.
Если экземпляр B ссылается на экземпляр A, и этот A на сервере кто-то удалил, то B тоже удалится на сервере. Если кто-то другой после удаления обновит список A и не обновит список B, то целостность у него нарушится. Поэтому, хочется иметь возможность проверки актуальности данных. Узнать, имеем ли мы полностью актуальные данные на данный момент невозможно, но можно придумать термин: что-то вроде "данные актуальны для последнего рефреша". То есть, если у списка A значение счётчика обновлений больше, чем у B, то целостность гарантировать нельзя, и надо обновлять всю цепочку зависимотей B и сам B.
Я продумал систему с такой функциональностью, но только для однопоточного варианта. В реальности же, юзер вполне себе может нажать "refresh" на B, который зависит от A, сразу же нажать Refresh на A, а может даже и что-то там изменить во время работы. Вариантов возникает, как минимум, два: как-то хитро всё это синхронизовавыть и продумывать все возможные варианты, или использовать очередь, но оба варианта имею свои минусы.
Можно описать подробнее, но, пока, вопрос-то вот в чём. Наверняка такая задача уже кем-то решена, не одним способом и даже название имеет. Какое? Подскажите, куда копать. Ну или может кто сталкивался.