[완료] 멀티 쓰레드 생성법
글쓴이: hyde1004 / 작성시간: 월, 2009/07/27 - 12:06오후
안녕하세요.
쓰레드 코딩을 해보고 있는데 생각처럼 잘 안되네요.
제 의도는 두 개의 쓰레드를 동시에 실행하고자 하나,
실제는 하나가 종료되어야 다른 하나가 수행됩니다.
아래 코드에서 aUi.run()과 aParser.run()을 동시에 실행하고 싶은데, 안되네요.
혹시 멀티 쓰레드 사용할때, 다수의 pthread_create()를 하나의 함수안에 넣어줘야 하는건가요?
aParser.run()을 aUi.run()에 넣으면 원하는 결과가 나오더라구요.
조언부탁드리겠습니다.
int main(void) { ui aUi; parser aParser; aUi.run(); aParser.run(); return 0; } int parser::run(void) { pthread_create(&thread_id, NULL, thread, NULL); pthread_join(thread_id, &thread_result); return 0; }; void* parser::thread(void* arg) { for(i=0; i<10; i++) { sleep(2); std::cout << "parser thread is running : " << i << std::endl; } pthread_exit(NULL); }; int ui::run(void) { pthread_create(&thread_id, NULL, thread, NULL); pthread_join(thread_id, &thread_result); return 0; }; void* ui::thread(void* arg) { for(i=0; i<10; i++) { sleep(2); std::cout << "parser thread is running : " << i << std::endl; } pthread_exit(NULL); };
Forums:
...
pthread_join은 해당 thread가 끝날 때까지 기다리는 함수입니다.
main thread에서 차례로 pthread_create, pthread_join, pthread_create, pthread_join을 부르는 구조이니, 당연히 첫번째 쓰레드가 다 끝난 다음에야 두번째 쓰레드가 만들어지게 되지요.
아!! 그렇군요..
아!! 그렇군요.. 감사합니다..
pthread_join 호출 위치...
위의 jick님이 설명하신 것처럼,
pthread_join은 해당 thread가 끝날 때까지 기다리는 함수입니다.
아래 코드에서,
쓰레드 예제1은 A쓰레드 생성후, A가 종료될때까지 대기한후, B쓰레드 생성
쓰레드 예제2는 A,B쓰레드 생성후, A,B가 종료될때까지 대기.
즉, 예제2와 같은 순서로 해야, A,B가 동시에 실행됨.
요즘, 저도 쓰레드를 공부하고 있는데요~
어떤 책에서 '쓰레드는 프로그래밍의 예술'이라고 하더군요.
여러가지 복잡한 개념이 많아서 고생하며, 열심히 파는중...(^^)
From:
*알지비 (메신저: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
이해하기 쉽게
이해하기 쉽게 적어주셨군요. 감사드립니다..
댓글 달기