Часы с прямой зависимостью — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 9: Строка 9:
 
*при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам;
 
*при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам;
  
Оказывается, что если ввести [[Параллельное программирование: Частичный порядок|частичный порядок]] предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение:<br>
+
Оказывается, что если ввести [[Параллельное программирование: Частичный порядок|частичный порядок]] предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение:
''a'' предшествует ''b'', тогда и только тогда, когда логическое время часов с прямой зависимостью события ''a'' меньше логического времени события ''b'' (''a.v[a.p] <tex>\le</tex> b.v[a.p]'', где ''a.p'' – номер процесса, в котором проиходит событие ''a'').
+
:''a'' предшествует ''b'', тогда и только тогда, когда логическое время часов с прямой зависимостью события ''a'' меньше логического времени события ''b'' (''a.v[a.p] <tex>\le</tex> b.v[a.p]'', где ''a.p'' – номер процесса, в котором проиходит событие ''a'').
  
 
Требование '''прямой зависимости''' звучит следующим образом: между событиями ''a'' (процесс ''u'') и ''b'' (процесс ''v'') процесс u передал процессу ''v'' сообщение, процесс ''v'' его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.
 
Требование '''прямой зависимости''' звучит следующим образом: между событиями ''a'' (процесс ''u'') и ''b'' (процесс ''v'') процесс u передал процессу ''v'' сообщение, процесс ''v'' его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.

Версия 18:09, 26 июня 2010

Логические часы с прямой зависимостью (direct dependency) - функция из множества событий (прием/посылка сообщений) в вектор из целых чисел.

  • Каждый поток имеет целочисленный n-мерный вектор (n – количество потоков), проинициализированный 0-ми.
  • Перед посылкой/принятием сообщения, поток инкрементит свою компоненту вектора.
  • При посылке сообщения к сообщению отправляющий поток добавляет свою компоненту вектора, а при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам.

В отличие от векторных часов:

  • при посылке сообщения передаем только свою компоненту вектора;
  • при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам;

Оказывается, что если ввести частичный порядок предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение:

a предшествует b, тогда и только тогда, когда логическое время часов с прямой зависимостью события a меньше логического времени события b (a.v[a.p] [math]\le[/math] b.v[a.p], где a.p – номер процесса, в котором проиходит событие a).

Требование прямой зависимости звучит следующим образом: между событиями a (процесс u) и b (процесс v) процесс u передал процессу v сообщение, процесс v его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.