pthread_create 최대 생성 갯수?

pangjun의 이미지

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 함수에서 리소스를 특별히 반환해 줘야 하는일이 있나요?

정태영의 이미지

검색해보세요.. 멀지않은 과거에..
관련된 쓰레드가 있었습니다..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

pangjun의 이미지

우선 답변 감사합니다.

http://bbs.kldp.org/viewtopic.php?t=37197&highlight=thread

이글을 말씀하신거 같은데요.

이글을 읽어 봤는데, 근본적인 해결책은 아닌것 같아서요.
스택 사이즈를 줄여준다는 글인것 같은데,
그말은.. 조금 더 많이 생성된 다음에는 다시 또 생성되지 못하는
일이 발생한지 않을까요?

반복 생성된 스레드가 계속 활동중인 스레드 이면 모르겠지만,
printf문만 출력하고 바로 죽을 거라는 생각하고 작성을 했는데,
아닌것 같다는 생각이 들어서입니다.

실제로 ps -ef 해서 메모리에 올라와 있는 스레드는 바로 바로 종료되어
항상 2-3개 이상 스레드가 떠 있지 않다는 것이죠.

제가 뭘 모르고 있는것 같아서요...
특별하게 스레드가 종료될때 스텍 같은것이나, 기타 리소스를
특별히 반환하는 방법등이 있는것인가 해서요...

조금만 더 도움을 주셨으면 합니다.. 죄송 :D

bugiii의 이미지

join할 필요가 없는 쓰레드는 생성시에 detach하셔야 합니다. 게시판 검색을 잘 하시면 이와 관련된 여러 글이 나옵니다...

pangjun의 이미지

detach도 해 봤습니다만...
증상은 동일합니다.
물론 join도 해봤구요.

게시판 검색을 해보면.. 대부분 스레드를 동시에 최대 생성 하는것을
시도해 보신글들입니다.
그 부분에 대해서는 이해가되었는데,

생성 한 후 바로 종료가 되기에 동작중인 스레드는 2-3개 밖에 안된다는거죠.

몬타비스타의 embedded용 linux를 사용해서 그런것인지...
HHL 2.1 버젼을 사용하며 커널 버젼은 2.4.17 이거든요...

dolsemix의 이미지

쓰레드 종료전에 pthread_exit() 호출하면 쓰레드에 할당된 리소스를 즉시 reclaim할 수 있다네요.. 그리고 쓰레드에 연결된 모든 리소스가 release 되기 전에 PTHREAD_CREATE_JOINABLE 속성(default)으로 생성된 쓰레드에 대해서는 반드시 pthread_join() 또는 pthread_detach()를 불러줘야 한답니다...

음... QNX 쓰레드 함수도 POSIX를 지원하는데... 참고가 될런지 모르겠네요

담배 고만 펴야겠다...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.