스레드에서...

익명 사용자의 이미지

pthread_t aaa;

pthread_create(&aaa, NULL, bbb, (void *)&data);

이런식으로 스레드를 생성합니다.
서버 프로그램인데 클라이언트 접속할때마다 스레드를 생성하는데여..

aaa의 값이 계속 늘어납니다...1026...2051...3076...
이런 식으로..

원래 이렇게 늘어나는게 맞나요?
저 위에 있는 bbb라는 함수에서 작업이 끝나면
pthread_exit(0); 이렇게 해서 쓰레드를 종료하도록 했습니다.

다른 함수를 써야 하는건가요?.. ㅡ.ㅡ;;
부탁..

익명 사용자의 이미지

pthread_t의 정의를 찾아보면

/usr/include/bits/pthreadtypes.h

/* Thread identifiers */
typedef unsigned long int pthread_t;

즉 만들어진 쓰레드를 구분하기 위한 thread id쯤 되지요
pid처럼 증가하다가... 임계점에 이르면 다시 0부터
시작합니다. 걱정안하셔도 됩니다. (참 이값이 음수이면
쓰레드 생성에 실패한것입니다, 리턴값을 체크해볼 필요가 있죠)
그리고, 한가지더,, thread id를 관리하셔야...
나중에 돌아가는 쓰레드를 취소할수 있습니다.

ps.
올려준 소스를 보면, 쓰레드를 join은 안하시나봐요?
pthread_detach하고 pthread_exit하면 쓰레드로 할당된
스택이라던지가 정리가 되는데,
pthread_detach안한 넘들은... join안해주면 메모리 릭이
발생합니다.. 마치 포크할때 좀비프로세스가 되는것 처럼요

pthread_create(3)
pthread_exit(3)
pthread_join(3)
pthread_detach(3)
의 맨페이즈를 찬찬히 읽어보세요
상당히 많은 정보를 제공합니다.

익명 사용자의 이미지

답변 감사립니다..ㅜ.ㅜ

음. .걱정 안해두 되는거였군요..^^;;
좋은 정보 감사합니다.

아! 근데.. fork할때.. 좀비 방지하기 위해서 wait하구 waitpid쓰잖아
요.. 맞나요?
거기서. .wait는 블러킹 되는거구.. waitpid는 논블러킹이라구 들었는데
요..ㅡㅡ;; 맞는건지.. 걍 제가 아는대루.. ^^;;

join은 어떤가요?

제가 알고있는게 잘못된거라면.. ^^;; 간단한 설명 부탁드립니다.

행복하세요..

익명 사용자의 이미지

wait 나 waitpid나 전부 child가 종료될때 까지
블럭 상태 이지요...

그래서 (17)SIGCHLD 시그널 핸들러를 등록을 해서
여기서 wait 처리를 하는거죠..
그렇게 되면, 메인 프로그램이 wait하느라 블럭되지 않고
계속 작업을 할수있는거구요

쓰레드의 경우엔
pthread_detach 라 녀석이 있어서
쓰레드가 프로세스에서 떨어져 나가게 되면
join 해줄 필요가 없습니다.

익명 사용자의 이미지

waitpid()를 non-blocking 으로 할 수도 있습니다.

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

위의 prototype에서 보다시피
wait()는 non-blocking이냐 blocking이냐를 선택할 여지가 없습니다.
하지만 waitpid()는 마지막 인자로 옵션이 있어서
여기서 WNOHANG으로 하면 non-blocking으로 할 수도 있습니다.

man page의 내용...
WNOHANG which means to return immediately if no child has exited.
(WNOHANG은 죽은 자식이 없더라도 바로 리턴한다.)

여기서 if는 although의 의미겠죠... ^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.