쓰레드 for문의 i값을 인자값으로 넘기기.....
글쓴이: devanix / 작성시간: 목, 2007/11/01 - 11:18오전
1 #include '<'stdio.h'>' 2 #include '<'unistd.h'>' 3 #include '<'pthread.h'>' 4 5 6 void* do_loop(void *arg); 7 8 pthread_mutex_t mutx; 9 int ncount; 10 11 int main(void){ 12 13 14 pthread_t t_id[3]; 15 void *status; 16 int i; 17 18 if(pthread_mutex_init(&mutx, NULL) != 0){ 19 perror("pthread_mutex_init() error "); 20 return 1; 21 } 22 23 for(i=0; i<3; i++){ 24 pthread_create(&t_id[i], NULL, do_loop, (void *)&i); 25 } 26 27 for(i=0; i<3; i++){ 28 pthread_join(t_id[i], &status); 29 } 30 31 if(pthread_mutex_destroy(&mutx) != 0){ 32 perror("pthread_mutex_destroy() error "); 33 return 1; 34 } 35 36 fputs("programing is end \n", stdout); 37 38 return 0; 39 } 40 41 void* do_loop(void *arg){ 42 43 int i; 44 int mydata; 45 int id = *((int*)arg); 46 47 48 for(i=0; i<10; i++){ 49 pthread_mutex_lock(&mutx); 50 printf("[%d]thread : %d\n", id, ncount); 51 mydata = ncount; 52 mydata++; 53 usleep(1000); 54 ncount = mydata; 55 pthread_mutex_unlock(&mutx); 56 usleep(10); 57 } 58 return 0; 59 }
안녕하세요.
위의 24줄의 pthread_create의 4번째 void*의 인자값으로 for문의 i값을 인자로 넘기려고 합니다.
근데 45중에 int id = *((int*)arg)로 id값을 받고
50줄에 id 값을 찍으면
결과값이 죄다 0으로 찍힙니다.
정확한 원인이 무엇인지 모르겠군요..
친절한 답변 부탁드립니다.
좋은 하루 되세요.
Forums:
참조로 넘기지 말고
참조로 넘기지 말고 값으로 넘기세요.
받는 쪽도 값으로 받습니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
전에 제가 올렸던
전에 제가 올렸던 질문이랑 같군요.
생성된 쓰레드들이 맨 첫번째(i=0) pthread_join() 시점에서야 비로소 실행되기 시작했겠지요.
OTL
댓글 달기