Часы с прямой зависимостью — различия между версиями
м (переименовал «Параллельное программирование: Часы с прямой зависимостью» в «Часы с прямой зависимостью») |
|
(нет различий)
|
Версия 15:20, 26 июня 2010
Логические часы с прямой зависимостью (direct dependency) - функция из множества событий (прием/посылка сообщений) в вектор из целых чисел.
- Каждый поток имеет целочисленный n-мерный вектор (n – количество потоков), проинициализированный 0-ми.
- Перед посылкой/принятием сообщения, поток инкрементит свою компоненту вектора.
- При посылке сообщения к сообщению отправляющий поток добавляет свою компоненту вектора, а при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам.
В отличие от векторных часов:
- при посылке сообщения передаем только свою компоненту вектора;
- при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам;
Оказывается, что если ввести частичный порядок предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение:
a предшествует b, тогда и только тогда, когда логическое время часов с прямой зависимостью события a меньше логического времени события b (a.v[a.p] b.v[a.p], где a.p – номер процесса, в котором проиходит событие a).
Требование прямой зависимости звучит следующим образом: между событиями a (процесс u) и b (процесс v) процесс u передал процессу v сообщение, процесс v его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.