Векторные часы — это механизм установления частичного
порядка между событиями в распределенной системе. Поскольку
локальное время (то, что возвращает функция clock
)
может отличаться на разных компьютерах, то события, происходящие
на разных компьютерах, нельзя сравнивать по
времени. Элементы распределенной системы — которые
называются процессами и, как правило, являются одновременно
работающими на нескольких физических компьютерах
программами, — помечают события
специальными метками. Эти метки, суть значения
векторных часов, позволяют определить частичный
порядок прчинно-следственной зависмости на множестве
событий. Предполагается, что все локальные события кадого процесса упорядочены по
времени (значения clock
монотонно увеличиваются), а
при передаче сообщений от одного процесса другому, событие отпрвки
сообщения логически предшествует событию получения этого
сообщения — нельзя получить то, что не было отправлено.
В системе с N процессами каждый процесс поддерживает N-мерный вектор натуральных чисел. Изменение вектора определяется следующими правилами.
Если заданы метки M1 и M2, то M1 < M2 тогда и только тогда, когда:
Требуется реализовать класс для работы с векторными часам. Интерфейс класса должен поддерживать следующие операции.
В случае обнаружения ошибочных данных методы, вкючая конструкторы, должны генерировать исключения.
Не должно быть возможности вызвать аварийную остановку программы при использовании общедоступного интерфейса класса.
Решение должно содержать набор тестов, которые вы разрабатываете самостоятельно.