Алгоритм параллельного обхода дерева

From
Mike Roschin (2:5030/243.1)
To
Gennady Mayko
Date
2002-10-05T22:54:01Z
Area
RU.ALGORITHMS
∙Reply to msg from Gennady Mayko(2:5020/400)
∙To All written 01.Oct.2002, 11:27
Ave Gennady Mayko!

 GM> Есть некоторое дерево, точная структура его не известна. Какие есть
 GM> алгоритмы полного обхода дерева 
ВОзможно, что я чего-то не понимаю, но IMHO есть один-единствный способ обхода дерева: взался за корешок -> обошел левую ветку -> обошел правую ветку. Небольшие нюансы - непринципиальны.
 GM> с использованием нескольких потоков (процессоров)? 
 GM> Количество узлов дерева гораздо больше, чем количество потоков,
 GM> которые практически можно создать.

PROCEDURE ОбходДерева ( КорневойУзел : УзелДерева );
  BEGIN
    ВыполнитьОперациюНадУзлом ( КорневойУзел );

    IF ЕстьСвободныйПроцесс THEN    
      ЗапуститьПроцесс ( ОбходДерева ( КорневойУзел->Левое ) );
    ELSE
      ОбходДерева ( КорневойУзел->Левое );
    END;

    IF ЕстьСвободныйПроцесс THEN    
      ЗапуститьПроцесс ( ОбходДерева ( КорневойУзел->Правое ) );
    ELSE
      ОбходДерева ( КорневойУзел->Правое );
    END;

  END ОбходДерева;

Примерно так. В рельности придется добавить массу приседаний для взаимоувязывания процессов, как то: обеспечить реентерабельность процедур обработки, локнуть обращение к разделяемым ресурсам, в зависимости от организации мультитридовой надстройки согласовать проверку наличных пустых тридов и запуск нового трида.

Get Warped 3.0!  \\Thesis 
--- 
 * Origin:   Слоны по деревьям не лазают! \\The Oxygen.   (2:5030/243.1)