pthread 실행 지속 방법과 pthread_join에 대한 질문.
글쓴이: cococo / 작성시간: 금, 2005/11/25 - 2:06오후
제가 아직 pthread에 대한 개념을 잘 못 잡고 있는 게 아닌가.. 하는생각이 드는데요.
아래의 코드가 있습니다.
void *fnc1() { int i; . . . while(1) printf("thread1"); . . . // pthread_exit(); } void *fnc2() { . . . while(1) printf("thread2"); . . . // pthread_exit(); } int main() { . . . pthread_create(fnc1); pthread_create(fnc2); . . . // while(1) ;; printf("program end"); return 1; }
여기서... main함수의 while 문이 없을 때 프로그램이 종료되는 게 이해가 안 됩니다.
종료된다는 건... 메모리에 fnc1, fnc2를 띄워놓고 main이 종료되어 버리기 때문에 프로그램이 종료되는 건가요?
그렇다면, main함수는 단지 thread들을 생성시키는 역할만 한다 하더라도, 모든 thread가 종료되기 전 까지는 (쓰레드가 종료되었는지를 어떻게 알아내는지는 차치하더라도) 종료되면 안된단 소리인가요?
또하나... pthread 로 검색해서 읽다가, 쓰레드를 종료할때 pthread_join이란 걸 쓴다는 걸 알게 되었는데요.
위의 코드에서는 pthread_join이 없지 않습니까?
그렇다면, 위의 ( while(1)없는 ) 프로그램을 실행시켰을 때, 프로그램이 설사 종료되더라도 pthread가 사용한 자원은 남아있게 되나요? 예를 들어 fnc1 의 변수 i 라던가.... -_-; 하지만 main이 이미 끝났으니 pthread가 사용한 자원도 다 해제되었을 것 같기도 하고...
man pthread_join 에 써 있는 설명을 보면 남아있을 것 같긴 한데, 확인해 볼 방법을 모르겠네요.
한 수 부탁드립니다.
좋은 하루 되세요.
Forums:
1) 주 쓰레드는 사망하면 아니되옵니다.2) 그외 임의의 개수의 쓰레
1) 주 쓰레드는 사망하면 아니되옵니다.
2) 그외 임의의 개수의 쓰레드는 사망시 자원반납을 해야하는데, 이는 프로그래머의 책임입니다.
- 주 쓰레드에서 pthread_join()을 호출한다.
- pthread_create()시 파라메터를 세팅해서 종료시 자동 detach되게 한다. 생성함수에 파라메터로 줌. (쓰레드 어트리뷰트세팅)
- 각 쓰레드가 시작될때, pthread_detach() 함수를 호출해서 자기 스스로 사망시 뒷정리를 하도록 하게 한다.
3) 반납을 안하면?
- 마치, malloc()만 호출하고 free호출안하는 것과 같다.
4) while(1)로 가는걸 좋아한다면, while(1) pause(); 형태로 호출해서 cpu time을 가급적 다른 얘들이 놀게 주도록 노력합시다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
음 부가적으로 가끔은 이런 경우가 있습니다.가상 시나리오) 주 쓰
음 부가적으로 가끔은 이런 경우가 있습니다.
가상 시나리오) 주 쓰레드는 뭐하는데 쓰는 물건인고?
1) 멀티쓰레드로 프로그램을 수행했다.
2) 특정 쓰레드에게 시그널을 보낼 필요가 생겼다.
문제) 콘솔이나 다른 프로세스에서 , 주 쓰레드에게야 시그널이 가지만, 그외 쓰레드에게 시그널을 줄 방법이 없다?!
답변) 주 쓰레드가 시그널을 핸들링해서 다른 쓰레드들에게 시그널을 주는 구조로 프로그램을 설계할 수 있을 것이다. 그외 타이밍등을 다루면 되겠지.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
오!
math님, 명쾌한 설명 정말 고맙습니다. 좋은 주말 되시기 바랍니다!!
덧글 : 첨에 while(1) 만 해놓고 된다고 그냥 썼었는데... 몰랐으면 큰일났을 뻔 했네요. ^^;;
Re: 오!
:evil: 쩝~ 고교때 수학 잘한다는 얘기를 잠시들었을뿐,(그것도 다른 과목에 비해... :oops: ) math안한지가 너무 오래 되었다는...... :oops:
댓글 달기