내 질문에 스레드가 매개 변수를 스레드로 전달합니다.스레드 매개 변수 전달 c
배열에 대해 작동하는 Foo 함수가 있습니다 (예 : arrayA). 속도를 높이기 위해 Foo는 어레이의 양방향으로 작동하도록 코딩되어 있습니다. 따라서 Foo는 arrayA와 정수 X를 매개 변수로 사용합니다. X의 값에 따라 정방향 또는 역방향으로 작동합니다.
"arrayA"및 "X"를 전역 적으로 사용하지 않으려합니다. 그래서, 나는 "arrayA"와 "X"를 Foo에 매개 변수로 전달하고 Foo를 실행하는 두 개의 스레드를 생성합니다. 각 방향으로 하나씩 실행합니다. 여기 내가 한 일이 있습니다 :
typedef struct {int* arrayA[MSIZE]; int X; } TP; //arrayPack=TP
void Foo (void *tP) {
TP *tp = (TP*)tP; // cast the parameter tP back to what it is and assign to pointer *tp
int x;
printf("\nX: %d", tp->X);
printf("\n arrayA: "); for (x=0; x<tp->arrayA.size(); printf("%d ", aP->arrayA[x]), x++);
} // end Foo
void callingRouting() {
int* arrayA[MSIZE] = {3,5,7,9};
TP tp; tp.arrayA=arrayA;
tp.X=0; _beginthread(Foo, 0, (void*)&tp); // process -- forward
tp.X=1; _beginthread(Foo, 0, (void*)&tp); // process -- reverse
}
값이 전달되지 않았습니다 - 배열이 비어있는 상태로 인쇄되고 X 값이 제대로 표시되지 않습니다. 나는 무엇을 놓치고 있습니까?
이것에 대한 약간의 독서에 대한 제안도 감사 할 것입니다 - 매개 변수를 스레드로 전달 - 특히 스레드가 공유하는 리소스를 전달할 때. 감사.
'int * arrayA [MSIZE];'는 아마도 잘못된 크기 일 것입니다. 사이드 노트로 – oldrinb
, 나는 반전 반복을하고있는 곳을 보지 못했다. 배열과 오프셋에 오프셋을 사용하는 것이 좋습니다. 그러면 더 많은 스레드로 확장 할 수 있습니다. – MartyE