쓰레드 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
댓글 달기