나는이 코드 조각을 찾고 있어요 :시험 공부를위한 설명을 찾고 있습니다. pthread_join. 이 코드는 무엇을하고 있습니까?
/* 04-join.c
Simple illustration of dividing work among two threads
pthread.h should be first otherwise compile with -D_THREAD_SAFE
*/
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *ar;
long n;
int id;
int sum;
} subarray;
void *incer(void *arg) {
long i;
int id = ((subarray*)arg)->id;
printf("Start thread: %d sum=%ld\n",id, ((subarray*)arg)->sum);
for (i = 0; i < ((subarray*)arg)->n; i++) {
((subarray*)arg)->ar[i]++;
((subarray*)arg)->sum++;
}
printf("Terminating thread: %d sum=%ld\n",id, ((subarray*)arg)->sum);
pthread_exit(NULL);
}
int main() {
int ar[1000000];
pthread_t th1, th2;
subarray sb1, sb2;
sb1.ar = &ar[0];
sb1.n = 500000;
sb1.id = 1;
sb1.sum = 0;
pthread_create(&th1, NULL, incer, &sb1);
sb2.ar = &ar[500000];
sb2.n = 500000;
sb2.id = 2;
sb2.sum = 0;
pthread_create(&th2, NULL, incer, &sb2);
pthread_join(th1, NULL);
pthread_join(th2, NULL);
printf("Terminating main: %d sum=%d\n",getpid(),sb1.sum+sb2.sum);
pthread_exit(NULL);
return 0;
}
내 질문은, for 루프의 기능 incer에. 우리는 정수에 대한 포인터이며, 정확히 이루어 subarry 구조체 아칸소에서 코드
((subarray*)arg)->ar[i]++;
의 조각이? 그래서 ar [i] ++는 무엇을합니까? 그것은 왜 행해지 는가? 합계를 증가 시킴과 동시에이 스레드가 "작업 완료"를 시뮬레이션합니까?
또 하나의 작은 질문입니다. incer 앞에있는 "void *"의 목적은 무엇입니까? void *의 중요성에 대해 나는 그 부분을 놓쳤다.
이 포인터는 incer 함수의 주소를 가리 킵니다. 그리고 함수를 생성함으로써 "incer"라고 불리는 void *가 생성되고 스레드를 생성 할 때이 코드 섹션을 참조 할 수 있으므로이 코드 섹션을 실행한다는 것을 알 수 있습니까?
왜 pthreads입니까? 프로세스 스레드?
"pthreads"의 "p"는 "POSIX"를 의미합니다. – arrowd