pthread_create 최대 생성 갯수?
글쓴이: pangjun / 작성시간: 화, 2004/05/11 - 7:57오후
pthread_create를 반복해서 계속 실행 시켜야 하는데요.
최대 생성 할수 있는 개수가 어케 되나요?
pthread_create 해서 생성되는 thread 함수는 바로 종료하기 때문에
동시에 실행되는 thread는 기껏해야 2-3개 정도 밖에 안됩니다..
그래도 pthread_create를 호출할수 있는 개수가 제한이 되는지
300개 조금 넘어서 더이상 생성 안되고 EAGAIN를 return 하는군요.
리소스 부족인듯 한데... 이상하군요...
while (1) { pthread_t thread; int ret = pthread_create (&thread, 0, Callback, NULL); printf("ret = %d\n", ret); sleep(1); } int cnt=0; void Callback() { printf("created[%d]\n", ++cnt); }
뭐.. 이런식으로 하니깐...
created[312]
ret = 11
이렇게 출력이 되네요... 한 300번 조금 넘어서부터 이렇게 출력이 되면서
생성이 안됩니다...
thread 함수에서 리소스를 특별히 반환해 줘야 하는일이 있나요?
Forums:
검색해보세요.. 멀지않은 과거에..관련된 쓰레드가 있었습니다..
검색해보세요.. 멀지않은 과거에..
관련된 쓰레드가 있었습니다..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
우선 답변 감사합니다.http://bbs.kldp.org/view
우선 답변 감사합니다.
http://bbs.kldp.org/viewtopic.php?t=37197&highlight=thread
이글을 말씀하신거 같은데요.
이글을 읽어 봤는데, 근본적인 해결책은 아닌것 같아서요.
스택 사이즈를 줄여준다는 글인것 같은데,
그말은.. 조금 더 많이 생성된 다음에는 다시 또 생성되지 못하는
일이 발생한지 않을까요?
반복 생성된 스레드가 계속 활동중인 스레드 이면 모르겠지만,
printf문만 출력하고 바로 죽을 거라는 생각하고 작성을 했는데,
아닌것 같다는 생각이 들어서입니다.
실제로 ps -ef 해서 메모리에 올라와 있는 스레드는 바로 바로 종료되어
항상 2-3개 이상 스레드가 떠 있지 않다는 것이죠.
제가 뭘 모르고 있는것 같아서요...
특별하게 스레드가 종료될때 스텍 같은것이나, 기타 리소스를
특별히 반환하는 방법등이 있는것인가 해서요...
조금만 더 도움을 주셨으면 합니다.. 죄송 :D
join할 필요가 없는 쓰레드는 생성시에 detach하셔야 합니다. 게시
join할 필요가 없는 쓰레드는 생성시에 detach하셔야 합니다. 게시판 검색을 잘 하시면 이와 관련된 여러 글이 나옵니다...
detach도 해 봤습니다만...증상은 동일합니다.물론 join도
detach도 해 봤습니다만...
증상은 동일합니다.
물론 join도 해봤구요.
게시판 검색을 해보면.. 대부분 스레드를 동시에 최대 생성 하는것을
시도해 보신글들입니다.
그 부분에 대해서는 이해가되었는데,
생성 한 후 바로 종료가 되기에 동작중인 스레드는 2-3개 밖에 안된다는거죠.
몬타비스타의 embedded용 linux를 사용해서 그런것인지...
HHL 2.1 버젼을 사용하며 커널 버젼은 2.4.17 이거든요...
쓰레드 종료전에 pthread_exit() 호출하면 쓰레드에 할당된 리소
쓰레드 종료전에 pthread_exit() 호출하면 쓰레드에 할당된 리소스를 즉시 reclaim할 수 있다네요.. 그리고 쓰레드에 연결된 모든 리소스가 release 되기 전에 PTHREAD_CREATE_JOINABLE 속성(default)으로 생성된 쓰레드에 대해서는 반드시 pthread_join() 또는 pthread_detach()를 불러줘야 한답니다...
음... QNX 쓰레드 함수도 POSIX를 지원하는데... 참고가 될런지 모르겠네요
담배 고만 펴야겠다...
댓글 달기