pthread 질문드립니다
글쓴이: redpig / 작성시간: 화, 2012/06/12 - 9:13오후
void *thread_func(void *param) { printf("%d thread started\n", *(int *)param); } int main(void) { while(1) { for(i=0; i<4; i++) { pthread_create(&thread[i], NULL, thread_func, (void *)&i); } for(i=0; i<4; i++) { pthread_join(thread[i], NULL); } } }
루프를 돌며 쓰레드를 4개씩 생성하고 쓰레드 함수에선 자신이 몇번째 쓰레드인지 printf하는 아주 간단한 소스인데요..
처음 실행시에는
1 thread started
2 thread started
3 thread started
0 thread started
이렇게 정상적으로 나오는데..
while 루프를 한번 돌고난후 두번째 쓰레드 생성시에는
1 thread started
0 thread started
0 thread started
0 thread started
이렇게 엉뚱한 결과가 나오는데요..
소스에 문제 있는건가요?
Forums:
동일한 변수의 주소를 스레드 함수로 넘기면서 스레드가
동일한 변수의 주소를 스레드 함수로 넘기면서 스레드가 끝나기도 전에 동일한 변수 값을 변경시켰습니다.(i++)
처음 나온 것은 우연히 잘 나온것 처럼 보인것 뿐이며 두번째 루프와 같이 비정상적으로 나와야지 정상입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
쓰레드에 데이터를 넘길때는 각 쓰레드마다 고유한
쓰레드에 데이터를 넘길때는 각 쓰레드마다 고유한 데이터를 가지도록 해야합니다.
현재는 i변수를 모든 쓰레드가 공유하므로
main에서 i의 값이 바뀌고 있는데 쓰레드들이 그 값을 읽고 있습니다.
세마포어
세마포어나 뮤텍스에 대한 자료를 찾아보시면 왜 다른지 아실거 같네요
답변 감사합니다
해결했습니다..
답변 감사합니다^^
댓글 달기