일부 레코드를 정렬하려면 바이너리 프로세스 트리를 만들어야하지만 생성이 어려워졌습니다. 내가 뭐하는 거지 검사 오류를 포함하지 않은 나는 그가하고있는 유일한 이후 아버지의 코드를 포함하지 않은바이너리 프로세스 트리가 잘못된 결과를 나타냅니다.
void proc_tree(int i, int current_depth, int max_depth, int rec, int offset)
{
pid_t kid = fork();
if(kid == 0)
{
printf("[%d,%d]: start: %d, end: %d\n", i, current_depth, rec, offset);
if(current_depth < max_depth)
{
int nodes= pow(2, current_depth);
if(i >= nodes)
i = 0;
proc_tree(2*i+1, current_depth+1, max_depth, rec, offset/2);
proc_tree(2*i+1, current_depth+1, max_depth, offset/2, offset);
}
}
}
: 나는 제품 proccesses의 이진 트리를이 재귀 코드를 사용하고 atm은 아이들이 끝나기를 기다리는 것입니다.
내가 얻고 출력은 다음이다 :
[0,0]: start: 0, end: 180
[1,1]: start: 0, end: 90
[3,2]: start: 0, end: 45
[4,2]: start: 46, end: 90
[2,1]: start: 91, end: 180
[1,2]: start: 91, end: 90
[2,2]: start: 91, end: 180
하면 대부분의 값은 깊이 = 2 제 노드 ([1,2])와 ([2,2 미세하지만시피 ])에 잘못된 값이 있습니다. 우리는 깊이 = 2에서 총 181 개의 레코드를 얻었으므로 4 개의 노드가 있으므로 각 노드는 각각 약 45 개의 레코드를 관리해야합니다. 그래서 [1,2] (180)
내가 어떤 도움을 주시면 감사하겠습니다이
proc_tree(0, 0, 2, 0, 180);
같은 주에서 함수를 호출하고, 137해야한다 (91), (136) 및 [2,2]을해야합니다. 미리 감사드립니다.
네, 그 포크가 부모의 주소 메모리 사본을 생성한다는 것을 알고 있습니다. 할당을위한 바이너리 프로세스 트리를 생성하라는 요청을 받았는데 제대로 작동하는 방법을 알 수 없었기 때문에 인터넷에서이 솔루션을 찾았습니다.하지만이 방법도 작동하지 않습니다. 그리고 나는 시간 계획, 적어도 기초에 익숙하기 때문에 결과의 순서에 대해 걱정하지 않았습니다. 사실 이것이 제안과의 연결이었습니다. http://stackoverflow.com/a/13038661/2212484 –
깊이 2의 산출물을 주문 했음에도 불구하고 공정은 0,45 - 46,90 - 91,136 - -137을 가져야합니다. , 80. 적어도 그 사건이 있어야합니다, 만약 내가 여기에 아무것도 그리워하지만 그 매개 변수와 함수를 호출 이후 포크 그 함수 안에 호출 된 가치가 인쇄해서는 안된다 (잘 나는 안된다. 그들이 내가 그들을 얻고 있기 때문에 그들이해야한다라고 생각해라, 나는 단지 이유를 해석 할 수 없다). 그리고 나는 엉덩이처럼 들리고 싶지 않았습니다 ... 나는이 일로 어려움을 겪고 있습니다. –