나는 그것을 위해 나는이 클래스를 사용하고, 트리 구조를 가지고있다. 그래서 노드의 경로를 설정하려면 부모 경로가 필요합니다.재귀 적 방법으로 병렬 처리를 구현하는 방법은 무엇입니까?</p> <pre><code>class Node { long IdNode; List<Node> Childs; string path; Data data; } </code></pre> <p>경로에 의해 단락 지어진 IdNode, 그래서 노드의 경로 등등 "IdParent.IdNode"이고 "."
public setPath(Node paramParentNode)
{
this.path = paramParentNode.Path + "." + this.IDNode;
foreach(Node iteratorNode in this.Childs)
{
iteratorNode.setPath(this);
}
}
이것은 secuential 버전 :
나는이 방법을 가지고있다. 하지만, 병렬로 그런 일이 구현하는 방법을 생각했다 :
public setPathMt(Node paramParentNode)
{
this.path = paramParentNode.Path + "." + this.IDNode;
Parallel.Foreach(this.Childs,
(iteratorNode) =>
{
iteratorNode.SetPathMt(this);
}
);
}
을하지만 모르는이 올바른 방법으로, 나는이 방법의 재귀 호출을 기다리는 방법을 알고하지 않기 때문에, 재귀 적 방법이 언제 끝났는지 어떻게 알 수 있습니까?
다중 스레드 재귀 적 방법을 구현하는 가장 좋은 방법은 무엇입니까?
감사합니다. 당신은 모든 방법에서 전달 된 노드를 사용하지 않는 한이
public SetPathMt(Node paramParentNode)
{
paramParentNode.Path = paramParentNode.Path + "." + this.IDNode;
Parallel.Foreach(paramParentNode.Childs,
new ParallelOptions { MaxDegreeOfParallelism = 32 },
(iteratorNode) =>
{
SetPathMt(iteratorNode);
}
);
}
같은
public SetPath(Node paramParentNode)
{
paramParentNode.Path = paramParentNode.Path + "." + this.IDNode;
foreach(Node iteratorNode in paramParentNode.Childs)
{
SetPath(iteratorNode);
}
}
및 병렬 방식처럼
왜 그런 것들을 병렬 처리합니까? 연속 된 버전에서 2 개의 문자열을 점으로 연결하면 시간이 많이 걸리지 않을까요? – Evk